7.0、Java继承与多态 - 多态的特性
继承(extends):用于定义类之间的关系,允许多个类继承自一个基类。 实现(implements):用于定义一个类对某个接口或超类的支持,实现了对多态性的基本需求。 行为的灵活性:一个对象可以表现出多种不同的行为,具体行为取决于其所属的子类。 代码的扩展性:通过新增子类,可以在不修改现有代码的情况下,增加新的行为和功能。 运行时的动态性:多态性使得程序在运行时能够根据实际情况进行方法和变量的动态绑定。
发布日期:2025-06-19 06:32:32
浏览次数:5
分类:精选文章
本文共 1795 字,大约阅读时间需要 5 分钟。
Java继承与多态 - 多态的特性
面向对象编程的三大核心特征中,多态性是非常重要的一环。多态性使得一个对象能够表现出多种不同的形态,这在实际开发中具有非常大的灵活性和扩展性。
多态的概念
多态性是指一个对象可以同时具有多种不同的形态。以现实生活中的例子来看,比如学生小明,他同时是一个学生(学生形态)和一个人类(人类形态)。同样地,在编程中,一个对象可以表现出多种不同的行为和属性,这正是多态性的体现。
在Java中,多态性的实现依赖于两个关键概念:
父类引用指向子类对象
在Java中,多态的本质表现为一个父类引用指向子类对象。以下是一个典型的例子:
public class People { int num = 6; public void eat() { System.out.println("人类吃饭"); }}public class Students extends People { int num = 9; @Override public void eat() { System.out.println("学生吃饭"); }}public class Main { public static void main(String[] args) { People people = new Students(); people.eat(); // 调用的是 Students 类中的 eat 方法 System.out.println(people.num); // 调用的是 People 类中的 num 字段(6) }} 在上述代码中:
people是一个People类的引用,但实际指向了一个Students类的对象。- 当调用
people.eat()时,由于people是People类型的引用,编译器会调用People类的eat方法。但由于多态性的动态绑定(即运行时绑定),实际执行的是Students类的eat方法。 - 当访问
people.num时,同样是People类的num字段被调用,因为引用是People类型的,编译器和运行时都会访问People类的字段。
访问成员方法和成员变量的规则
在Java中,成员方法和成员变量的访问有所不同:
成员方法的访问
- 编译阶段:编译器根据引用端的类类型(父类)来选择方法的解析。
- 运行阶段:在运行时,实际调用的是引用的对象(子类)中对应方法的实现。
例如:
Fu fu = new Zi();fu.eat(); // 编译阶段选择 Fu 类中的 eat 方法,但运行时调用 Zi 类中的 eat 方法fu.fuMethod(); // 编译阶段选择 Fu 类中的 fuMethod 方法,但运行时调用 Fu 类中的 fuMethod 方法fu.ziMethod(); // 编译阶段无法找到对应的方法,编译错误
成员变量的访问
- 编译阶段和运行阶段:都根据引用的类类型(父类)来访问成员变量。
例如:
People people = new Students();people.num; // 编译和运行时都访问 People 类中的 num 字段(6)
多态的作用
多态性在Java中具有以下几个重要作用:
总结
多态性是Java面向对象编程中非常重要的一特性。通过多态性,一个对象可以同时具有多种不同的形态,并能够在运行时动态地表现出不同的行为。理解多态性是掌握Java对象编程的关键步骤。在实际编程中,多态性不仅能够提高代码的灵活性和扩展性,还能够使程序更加高效和易于维护。
发表评论
最新留言
感谢大佬
[***.8.128.20]2026年06月15日 19时50分08秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
php基本符号大全
2023-03-01
php基础篇-二维数组排序 array_multisort
2023-03-01
php增删改查封装方法
2023-03-01
php多条件筛选功能的实现
2023-03-01
php多线程
2023-03-01
PHP大数组循环-避免产生Notice或者是Warning
2023-03-01
PHP大数组过滤元素、修改元素性能分析
2023-03-01
PHP大文件切片下载代码
2023-03-01
php如何做表格,新手怎么制作表格
2023-03-01
RabbitMQ集群 - 普通集群搭建、宕机情况
2023-03-01
php如何正确的获得文件的后缀名
2023-03-01
PHP如何生成唯一的数字ID
2023-03-01
PHP如何获取当前页面的最后修改时间
2023-03-01
PHP如何读取json数据
2023-03-01
PHP字符串
2023-03-01
PHP字符串递增
2023-03-01
php学习之基础语法
2023-03-01
RabbitMQ集群 - 仲裁队列、Raft协议(最详细的选举流程)
2023-03-01
PHP学习总结(11)——PHP入门篇之WAMPServer多站点配置
2023-03-01