博客
关于我
Java-笔记12
阅读量:789 次
发布时间:2023-01-27

本文共 1672 字,大约阅读时间需要 5 分钟。

Java 进阶主题:面向对象特征之多态性解析

多态性是面向对象编程中的一项核心概念,值得我们深入理解和掌握。本文将从定义到实现再细说多态性的魅力。

多态性的基本概念

多态性是指:通过一个引用类型(如引用变量)可以指向不同类型的对象,并且这些对象可以响应同样的方法调用。多态性最明显的体现是方法的多态性。具体来说:

  • 在编译时,只能看见引用类型声明的方法 Signatures。
  • 在运行时,根据引用所指向的实际对象类型,会调用对象类中被重写的方法版本。
  • 多态性可以带来最终的代码升级性,即后期可以通过动态交换对象来改变行为,而无需重新编译。

    多态性的实现条件

    多态性的实现需要两个前提条件:

    • 继承性:必须有一个继承关系,子类继承父类。
    • 方法重写:子类对父类中方法进行了重写,即覆盖了父类的方法。

    实际案例分析

    学习案例:PersonTest类

    public class PersonTest {    public static void main(String[] args) {        // 父类引用指向不同子类对象        Person p1 = new Person(); // 父类引用指向父类对象        p1.eat(); // 调用父类eat方法        Man man = new Man(); // 父类引用指向子类对象        man.eat(); // 调用子类重写的eat方法        man.age = 25; // 设置属性        man.earnMoney(); // 调用子类特有的方法         // 对同一方法进行多次调用        System.out.println("*******************");        // 对象的多态性:父类引用指向子类对象        Person p2 = new Man(); // Person引用指向Man对象        p2.eat(); // 调用Man重写的eat方法        p2.walk(); // 调用子类特有的walk方法        // p2.earnMoney(); // earnMoney方法仅在Man类中存在    }}

    Run-time Polymorphism at Play

    从上述代码可以看出,当调用 p2.eat() 时,由于 p2 是一个 Person 引用指向 Man 对象,会自动调用 Man 类中重写的 eat 方法。这种特性使得系统在运行时能够根据实际对象类型自动选择合适的方法进行调用,这正是多态性的魅力所在。

    Java中的多态性的实现机制

    在Java中,所有引用变量都以某种方式储存在堆内。多态性其实是显式或者隐式地通过引用如何指向对象来实现的。具体来说:

  • 引用类型的确定性:在编译时,引用类型是明确的,这一点决定了在编译阶段可以知道能够调用哪些方法。
  • 实际对象的不确定性:在运行时,实际对象可以是引用类型的任何实现类(子类),这在方法调用时需要考虑进去。
  • 关键点:

    • 编译时行为:只看到父类中的方法 Signatures。
    • 运行时行为:调用子类重写的方法。
    • 方法调用的虚拟化:称为“虚拟方法调用”(VTable / Method Resolution at Runtime)。

    多态性的局限性

    虽然多态性提供了很大的灵活性,但它也有一些局限性:

  • 属性的多态性:属性的访问不是多态的,会在编译时根据引用类型来获取属性值。
  • 构造器的多态性:构造器(ctors)的调用是确定性的,只能看到引用类型的指定的构造器。
  • 性能开销:多态性需要在方法调用时进行配置(vtable lookup),这意味着有潜在的性能开销。
  • 总结

    多态性是面向对象编程中的一项核心概念,它为系统提供了高度的灵活性和可扩展性。通过多态性,可以在同一个引用类型下,具备不同的行为。然而,理解多态性的实现机制和实际应用场景,对于编写更高效和可靠的Java程序至关重要。

    转载地址:http://zdryk.baihongyu.com/

    你可能感兴趣的文章
    Java操作Sql语句 出现迭代死循环 (Bug排查)
    查看>>
    java攀枝花市房屋租售信息管理平台的设计与实现(ssm)
    查看>>
    java教学团队管理系统(ssm)
    查看>>
    java教学网站(ssm)
    查看>>
    java教学质量管理平台(ssm)
    查看>>
    java教师教学质量评估系统(ssm)
    查看>>
    java教师管理系统(ssm)
    查看>>
    java教师管理系统(ssm)
    查看>>
    java教师管理系统(ssm)
    查看>>
    java教师绩效考核过程管理系统(ssm)
    查看>>
    java教师课堂助手app(ssm)
    查看>>
    java教师课程管理与教学辅助系统(ssm)
    查看>>
    java教研室采购管理系统(ssm)
    查看>>
    java教育培训系统(ssm)
    查看>>
    java教育机构管理(ssm)
    查看>>
    java教育质量测评系统(ssm)
    查看>>
    java教育辅导班信息网(ssm)
    查看>>
    BurpSuite实战九之使用Burp Repeater
    查看>>
    Ceph企业级实战
    查看>>
    Ceph对象存储详解
    查看>>