【Java】多态性【主线学习笔记】

news/2024/9/19 14:49:43 标签: java, 学习, 笔记

文章目录

  • 前言
  • 多态性
    • 1、编译时多态性(静态多态性):
    • 2、运行时多态性(动态多态性)
    • 3、多态性的实用性
    • 4、多态性的优点与弊端
  • 下一篇
    • 点击跳转《【Java】多态性-向下转型【主线学习笔记】》


前言

Java是一门功能强大且广泛应用的编程语言,具有跨平台性和高效的执行速度,广受开发者喜爱。在接下来的学习过程中,我将记录学习过程中的基础语法、框架和实践技巧等,分享学习心得,对自己学习过程进行整理和总结,也希望能为其他学习Java的朋友提供一些帮助和参考。


多态性

在 Java 中,多态性是一种面向对象编程的特性,允许同一个方法或对象在不同的上下文中表现出不同的行为。多态性通过方法重写(Override)和方法重载(Overload)来实现,可以使代码调用更加灵活和可扩展。

1、编译时多态性(静态多态性):

方法重载是指同一个类中可以有多个同名的方法,但参数类型或参数数量不同。编译器会在编译时根据方法的参数来决定调用哪个方法。

java">class Example {
    void display(int a) {
        System.out.println("整数: " + a);
    }

    void display(String a) {
        System.out.println("字符串: " + a);
    }
}

public class Test {
    public static void main(String[] args) {
        Example obj = new Example();
        obj.display(10);  // 输出:整数: 10
        obj.display("Hello");  // 输出:字符串: Hello
    }
}

2、运行时多态性(动态多态性)

方法重写是指子类提供了父类方法的具体实现。在运行时,Java会根据实际对象的类型来调用对应的方法,这就是动态多态性。运行时多态性是通过继承和方法重写来实现的,它使得程序能够根据实际对象的类型来执行相应的行为。

java">// 父类 BankCard,代表通用的银行卡
class BankCard {
    // 模拟刷卡方法
    void swipe() {
        System.out.println("使用银行卡刷卡");
    }
}

// 子类 CreditCard,代表信用卡
class CreditCard extends BankCard {
    @Override
    void swipe() {
        System.out.println("使用信用卡刷卡并提供信用额度");
    }
}

// 子类 DebitCard,代表借记卡
class DebitCard extends BankCard {
    @Override
    void swipe() {
        System.out.println("使用借记卡刷卡并扣除账户余额");
    }
    void shape(){
        System.out.println("这是一个长方形的卡");
    }
}

// 消费类,模拟支付场景
class PaymentProcessor {
    // 动态多态性体现在这里,使用父类 BankCard 作为参数
    public void processPayment(BankCard card) {
        card.swipe();  // 调用的是具体卡片对象的 swipe() 方法
    }
}

// 测试类
public class TestPolymorphism {
    public static void main(String[] args) {
        PaymentProcessor processor = new PaymentProcessor();

        // 使用信用卡进行支付
        processor.processPayment(new CreditCard());  // 输出:使用信用卡刷卡并提供信用额度

        // 使用借记卡进行支付
        processor.processPayment(new DebitCard());  // 输出:使用借记卡刷卡并扣除账户余额
    }
}


3、多态性的实用性

适用于方法,不适用于属性。

4、多态性的优点与弊端

  • 优点:在软件系统的各种组件中,如模块、类、功能等,应该在不修改现有代码的基础上,引入新功能。极大的减少了代码的冗余,不需要定义多个重载的方法。
  • 弊端:不能直接调用Man中的特有属性和方法。例如上面的银行卡案例,在消费类模拟支付场景的类中,是无法使用card.shape()这一方法,因为声明为父类的引用,所以你无法预先判断传进来的card是子类借记卡还是信用卡又或者是父类银行卡类别。

下一篇

点击跳转《【Java】多态性-向下转型【主线学习笔记】》


http://www.niftyadmin.cn/n/5665731.html

相关文章

功能测试干了三年,快要废了。。。

8年前刚进入到IT行业,到现在学习软件测试的人越来越多,所以在这我想结合自己的一些看法给大家提一些建议。 最近聊到软件测试的行业内卷,越来越多的转行和大学生进入测试行业,导致软件测试已经饱和了,想要获得更好的待…

JAVA与Python谁更适合后端?

Java和Python各有优势,选择哪种语言应根据项目的具体需求和团队的实际情况来决定。 小型团队或原型开发:如果项目规模小、需求变动频繁,或者需要快速开发产品原型,建议使用Python。大型项目或企业级应用:如果项目规模…

【毕设】基于Java的超市管理系统

基于Java的超市管理系统是一个用于管理超市日常运营的软件解决方案,它可以包括库存管理、销售管理、客户管理等多个模块。以下是一个简化的系统设计方案,以及一些关键组件和技术选型的建议。 系统架构 前端: HTML/CSS/JavaScript&#xf…

状态估计算法

目录 前言一、贝叶斯滤波二、卡尔曼滤波2.1 KF简介2.2 基本线性模型2.3 KF公式推导2.3.1 预测值2.3.2 先验误差协方差矩阵2.3.3 卡尔曼增益2.3.4 最优估计值2.3.5 后验误差协方差矩阵 2.4 KF算法使用2.5 MATLAB验证2.5 Python验证 三、扩展卡尔曼滤波3.1 EKF原理3.2 MATLAB实现…

(java+Seleniums3)自动化测试实战2

1.环境问题点 此时,可以成功打开浏览器 此时,selenium可以控制浏览器 get--就是访问的意思 将驱动复制在当前项目之下 复制驱动的路径 2.基本元素定位 使用id来定位: 使用Name来定位: 成功: 使用id是唯一的&#xff0c…

python画图|3D bar进阶探索

前述学习过程只能怪,已经探究了3D直方图的基础教程,详见下述链接: python画图|3D直方图基础教程-CSDN博客 实际上,基础文章直接进入了堆叠教程,相对来说基础的程度不够,因此有必要再次探索。 【1】官网教…

软件工程测试

1. 软件测试概述 通俗地说,软件测试是为了发现错误而执行程序的过程。 软件测试:根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序…

【算法】堆与优先级队列

【ps】本篇有 4 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1)最后一块石头的重量 .1- 题目解析 .2- 代码编写 2)数据流中的第 K 大元素 .1- 题目解析 .2- 代码编写 3)前K个高频单词 .1- 题目解析 .2- 代码编写 4&#xf…