2026/7/29 5:49:23
网站建设
项目流程
您提供的代码清单(Listing 1-20)系统地展示了Java继承与多态的核心概念。以下是这些代码示例所演示的关键知识点总结:
一、继承基础与成员访问
| 清单 | 核心演示点 | 关键代码/说明 |
|---|
| Listing 1 | 继承的基本语法与成员访问 | class B extends A。子类B继承了父类A的公有成员i,j和方法showij(),并可以访问它们。 |
| Listing 2 | 私有成员(private)的不可继承性 | 父类A中的私有成员j在子类B中无法直接访问(total = i + j;会导致编译错误)。这体现了封装性。 |
| Listing 3 & 4 | 继承的扩展性 | BoxWeight和ColorBox都继承自Box,分别添加了weight和color属性,展示了如何基于现有类创建更具体的类。 |
二、引用、super关键字与构造方法链
| 清单 | 核心演示点 | 关键代码/说明 |
|---|
| Listing 5 | 引用类型的转换(向上转型) | Box plainbox = weightbox;将子类BoxWeight引用赋值给父类Box引用。通过plainbox只能访问Box类中定义的成员(如volume()),无法访问子类特有的weight成员。 |
| Listing 6 & 7 | super关键字调用父类构造方法 | super(w, h, d);用于在子类构造方法中调用父类的匹配构造方法,必须位于子类构造方法的第一行。这是初始化继承而来的父类属性的正确方式。 |
| Listing 8 | 使用super传递对象给父类构造方法 | super(ob);在子类的拷贝构造方法中,将子类对象ob传递给父类的拷贝构造方法(Box(Box ob)),以实现父类部分的深拷贝。 |
| Listing 9 | super访问被隐藏的父类成员 | 当子类B的成员i隐藏了父类A的i时,使用super.i可以明确访问父类的版本。 |
| Listing 11 | 构造方法的调用链 | 创建C类对象时,输出顺序为:A->B->C。这证明了构造方法的调用顺序是从最顶层的父类开始,逐级向下到子类。 |
三、方法重写(Override)、重载(Overload)与多态
| 清单 | 核心演示点 | 关键代码/说明 |
|---|
| Listing 12 | 方法重写(Override) | 子类B定义了与父类A完全相同签名(方法名、参数列表)的show()方法,从而覆盖了父类的方法。subOb.show()调用的是子类B的版本。 |
| Listing 13 | 使用super调用被重写的父类方法 | 在子类重写的方法中,通过super.show()可以调用父类被覆盖的方法版本。 |
| Listing 14 | 方法重载(Overload)与重写的区别 | 子类B中的show(String msg)与父类A中的show()参数列表不同,这是重载。重载发生在同一个类或父子类之间,不构成覆盖。 |
| Listing 15 & 16 | 动态方法分派(运行时多态) | 父类引用A r可以指向不同的子类对象(B,C)。r.callme()或figref.area()在运行时根据r实际指向的对象类型来决定调用哪个版本的方法,这是多态的核心体现。 |
| Listing 17 & 18 | 抽象类与抽象方法 | abstract class A和abstract double area();。抽象类不能实例化,抽象方法没有方法体,必须在子类中被重写(除非子类也是抽象类)。这使得父类可以定义规范,具体实现由子类完成。 |
四、final关键字
| 清单 | 核心演示点 | 关键代码/说明 |
|---|
| Listing 19 | final 方法 | 父类中使用final void meth()声明的方法不能被子类重写。尝试重写会导致编译错误。 |
| Listing 20 | final 类 | 使用final class A声明的类不能被任何其他类继承。 |
五、多级继承
| 清单 | 核心演示点 | 关键代码/说明 |
|---|
| Listing 10 | 多级继承(多层继承) | Shipment继承自BoxWeight,BoxWeight继承自Box。这展示了如何通过继承链构建更复杂的类层次结构。 |
核心概念对比表
| 特性 | 方法重写 (Override) | 方法重载 (Overload) |
|---|
| 发生位置 | 父子类之间 | 同一个类或父子类之间 |
| 方法签名 | 必须完全相同(方法名、参数列表) | 必须不同(参数列表的类型、顺序、个数) |
| 返回类型 | 子类方法返回类型可以是父类方法返回类型的子类(协变返回类型) | 可以不同 |
| 访问权限 | 子类方法不能比父类方法更严格(如父类public,子类不能是private) | 可以不同 |
| 关键作用 | 实现多态,运行时根据对象类型调用方法 | 提供处理不同类型数据的同名方法,编译时确定调用哪个方法 |
总结
这些代码清单完整地展示了Java面向对象编程中继承与多态的完整知识链:从基本的类扩展、成员访问控制,到使用super关键字、构造方法链,再到方法重写/重载、运行时多态(动态绑定),以及抽象类和final修饰符的应用。理解这些内容是掌握Java核心面向对象特性的基础。
参考来源
- java中super(aa bb cc)_河北工业大学java期末考试复习题(部分答案).doc
- 探索 Java 领域 Eclipse 的代码分析工具
- Java中的代码分析工具
- JAVA语言总体讲解与一些代码分析
- 初识java———javaSE(5)继承与多态【求个关注!】