一、继承性原则
1. 单继承原则
Java 类只能直接继承一个父类(class B extends A),但可通过接口实现多继承效果(implements 多个接口)。
2. 传递性
子类继承父类的所有非私有成员(public protected/默认权限的属性和方法),但不继承:
- private 成员(可通过父类提供的公共方法间接访问)
- 构造方法(需通过 super() 显式/隐式调用)
3. 方法覆盖规则
- 子类重写父类方法时:
- 方法名、参数列表必须相同。
- 访问权限不能比父类更严格(如父类 protected,子类不能改为 private)。
- 返回类型可以是父类方法返回类型的子类(协变返回类型)。
4. 构造方法调用顺序
- 子类构造方法默认先调用父类无参构造(隐式 super())。
- 若父类没有无参构造,必须调用 super(args)(必须是构造方法的第一条语句)。
二、继承的作用
| 作用 | 说明 | 示例 |
|------------------- ------|--------------------------------------------------------------|-------------- ------------- -------|
| 代码复用| 子类直接复用父类的属性和方法,减少重复代码 | Animal → Dog复用 eat() 方法 |
| 多态支持| 父类引用指向子类对象,运行时动态调用子类方法 | Animal a = new Dog(); a.sound();|
| 功能扩展 | 子类可新增方法,或重写父类方法以改变行为。 | Bird类新增 fly() 方法。 |
| 层次化设计 | 通过继承树(如 Object→Animal→Dog)组织代码结构,逻辑更清晰。| Java 集合框架(List→ArrayList)。 |
三、典型代码示例
class Animal { // 父类
protected String name;
public Animal(String name) {
this.name = name;
}
public void eat() { // 可重写方法
System.out.println(name + " is eating.");
}
}
class Dog extends Animal { // 子类
public Dog(String name) {
super(name); // 调用父类构造
}
@Override
public void eat() { // 方法重写
System.out.println(name + " eats bones.");
}
public void bark() { // 子类扩展方法
System.out.println("Woof!");
}
}
// 多态测试
public class Test {
public static void main(String[] args) {
Animal myDog = new Dog("Buddy");
myDog.eat(); // 输出: Buddy eats bones.(动态绑定)
}
}
```
四、总结口诀
1.单继承,多接口
2.子类复用父类功
3.重写方法需一致
4.构造先调super中