Java 继承机制详解:extends、super、多态与设计原则
继承让子类获得父类属性和方法,实现代码复用与层次化组织。Java 采用单继承(一个类仅能 extends 一个父类),但可实现多个接口。
extends 关键字
class Father { void work() {} }
class Son extends Father { void study() {} }
子类拥有父类非私有成员(字段、方法、嵌套类)。构造器不继承,但子类构造器首行隐式/显式调用父类构造器。
继承示例:计算器扩展
class Calculation {
void addition(int x, int y) { System.out.println("和: " + (x+y)); }
void subtraction(int x, int y) { System.out.println("差: " + (x-y)); }
}
class MyCalculation extends Calculation {
void multiplication(int x, int y) { System.out.println("积: " + (x*y)); }
public static void main(String[] args) {
MyCalculation mc = new MyCalculation();
mc.addition(20, 10); // 继承的方法
mc.subtraction(20, 10); // 继承的方法
mc.multiplication(20, 10); // 自有方法
}
}
super 关键字
两大核心用途:
- 访问被隐藏的父类成员:
super.field、super.method() - 调用父类构造器:
super(args)必须是构造器首行
区分同名成员
class Super { int num = 20; void show() { System.out.println("父类"); } }
class Sub extends Super { int num = 10; void show() { System.out.println("子类"); }
void demo() {
System.out.println(super.num); // 20
super.show(); // 父类
}
}
调用带参父类构造器
class Super { Super(int age) { this.age = age; } int age; }
class Sub extends Super { Sub(int age) { super(age); } } // 必须显式调用
IS-A 关系与 instanceof
extends 建立 IS-A 关系:Dog extends Animal → Dog IS-A Animal。
Animal a = new Dog();
System.out.println(a instanceof Animal); // true
System.out.println(a instanceof Dog); // true
instanceof 用于运行时类型检查,防止 ClassCastException。
HAS-A 关系(组合)
类包含另一个类的实例,而非继承。体现“拥有”关系,降低耦合,复用性更强。
class Engine { void start() {} }
class Car { private Engine engine = new Engine(); // Car HAS-A Engine }
继承类型
- 单继承:Java 类仅支持单继承
- 多层继承:A → B → C
- 层次继承:一个父类多个子类
- 混合继承:上述组合
⚠️ Java 不支持多重继承(class C extends A, B 非法),但可通过实现多接口实现类似效果。
设计原则
- 里氏替换原则 (LSP):子类对象能替换父类对象而不破坏程序
- 优先组合优于继承:除非明确 IS-A,否则用 HAS-A
- 封装变化:将变化点抽象为接口/抽象类,子类实现细节
- 避免过深继承树:超过 3 层建议重构
java
- 掌握 C# 继承:概念、类型与实战代码完全指南
- C++ 继承完全指南:构建可复用的强大类层次
- C# 继承完全指南:基类、派生类、初始化与多重继承替代方案
- 深入理解 Java final 关键字:变量、方法与类的不可变性
- Java instanceof 运算符完全指南:用法、继承与接口检查
- 深入理解 Java 静态嵌套类:用法、差异与实战示例
- 精通 Java 匿名内部类:定义、语法与实战示例
- Java 单例模式详解:安全实现与使用指南
- 精通 Java 反射:运行时检查类、方法与字段
- 掌握 Java ObjectOutputStream:序列化、核心方法与实战示例
- 掌握 Java 泛型:构建可复用、类型安全的代码
- 掌握 Java 文件操作:java.io 包下的创建、读取、写入与删除