• 【Java】面向对象的特性之一:多态性


    持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情

    1️⃣前言

    大家好,我是翼同学。今天笔记的内容是:

    • 多态

    2️⃣内容

    2.1、什么是多态?

    我们将一个对象变量可以引用多种实际类型的现象称为多态

    在继承机制中,每个子类的对象都属于父类的对象,这体现了is-a规则,也就是说,程序中出现的父类对象都可以用子类对象置换。我们可以将一个子类的对象赋给父类变量

    2.2、Java 多态

    Java中,对象变量是多态的。多态使得Java程序可以有更好的扩展,并可对所有类的对象进行通用处理。

    多态的常见形式为:

    1. 父类类型 对象名 = new 子类构造器;
    2. // 或者
    3. 接口 对象名 = new 实现类构造器;
    4. 复制代码

    多态存在的必要条件如下:

    • 有若干子类继承同一个父类;
    • 子类重写了父类中的方法;
    • 父类的引用指向了子类对象。

    注意:

    一个父类变量既可以引用父类对象,也可以引用任何一个子类对象。但是反过来就不行。我们不能将一个父类的引用赋给子类变量,这是非法的。

    在多态的形式下,定义方法时使用父类类型作为参数,该方法就可以接受父类的一切子类对象,对象可以实现解耦合,更便于维护,也体现了多态的扩展性。

    2.3、多态的举例

    父类如下所示:

    1. // 动物类
    2. abstract class Animals {
    3. public String name = "Animals";
    4. abstract void eat();
    5. }
    6. 复制代码

    下面是两个子类:

    1. // 子类1:猫类
    2. class Cat extends Animals {
    3. public void eat() {
    4. System.out.println("猫吃猫粮");
    5. }
    6. }
    7. // 子类2:狗类
    8. class Dog extends Animals {
    9. public void eat() {
    10. System.out.println("狗吃狗粮");
    11. }
    12. }
    13. 复制代码

    最后是主类的测试:

    1. public class Test {
    2. public static void main(String[] args) {
    3. // 多态-> 父类类型 变量名 = new 子类构造器;
    4. Animals a1 = new Cat();
    5. Animals a2 = new Dog();
    6. // 调用方法
    7. a1.eat();
    8. a2.eat();
    9. // 调用属性
    10. System.out.println(a1.name);
    11. System.out.println(a1.name);
    12. }
    13. }
    14. 复制代码

    运行结果如下:

    1. 猫吃猫粮
    2. 狗吃狗粮
    3. Animals
    4. Animals
    5. 复制代码

    可以看到,同一个类型(Animals)的对象执行同一个行为,会表现出不同的行为特征。又由于多态更加侧重于行为多态,因此变量的调用和方法调用是不同的。

    2.4、虚函数与动态绑定

    虚函数的存在是为了多态。但在Java中,并没有虚函数的概念。事实上Java的普通方法就相当于C++的虚函数。如果对方法加上final修饰符后,就可以去掉Java中方法的虚函数特性。

    另外,在运行时能够自动选择调用哪个方法的现象被称为动态绑定。对于Java来说,动态绑定是默认的处理方式。


     

    3️⃣写在最后

    好了,今天的笔记就记到这里。

  • 相关阅读:
    Spring -- 事务
    利用flask-socketio实现前后端实时通信的功能
    一个简单的HTML篮球网页【学生网页设计作业源码】
    Postman基础功能-前置脚本与接口关联
    Jmeter- Beanshell语法和常用内置对象(网络整理)
    组内教研活动简报
    Android 基础知识4-2.1常用控件文本框(TextView)
    EANet:用于医学图像分割的迭代边缘注意力网络
    JPG文件头-笔记
    【深入浅出Java并发编程指南】「难点 - 核心 - 遗漏」线程状态流转及生命周期的技术指南(知识点串烧)
  • 原文地址:https://blog.csdn.net/BASK2312/article/details/127611130