精通 Java 继承:核心概念、类型与实战示例
精通 Java 继承
深度探索 Java 继承 —— 理解其原理、真实案例,并学会如何应用它编写更清晰、可复用的代码。
继承是面向对象编程的基石,允许基于现有类创建新类。
派生类称为 子类(子类或派生类),被继承的类称为 父类(父类或基类)。extends 关键字建立这种关系。
class Animal { // 方法和字段 } class Dog extends Animal { // Dog 继承 Animal 的字段和方法 }
此处,Dog 继承 Animal 的所有成员 —— 子类获得父类功能。
示例 1:基础继承
class Animal { String name; public void eat() { System.out.println("I can eat"); } } class Dog extends Animal { public void display() { System.out.println("My name is " + name); } } class Main { public static void main(String[] args) { Dog labrador = new Dog(); labrador.name = "Rohu"; labrador.display(); labrador.eat(); } }
输出
My name is Rohu I can eat
本例中,Dog 继承了 Animal 的 name 和 eat(),因此 Dog 对象可直接访问它们。

is-a 关系
Java 继承体现 is-a 关系:子类是父类的特化形式。
- Car is a Vehicle
- Orange is a Fruit
- Surgeon is a Doctor
- Dog is an Animal
这些自然层级证明了使用继承的合理性。
方法重写
当子类定义与父类同签名的方法时,子类方法重写父类版本,实现运行时多态。
示例 2:重写 eat()
class Animal { public void eat() { System.out.println("I can eat"); } } class Dog extends Animal { @Override public void eat() { System.out.println("I eat dog food"); } public void bark() { System.out.println("I can bark"); } } class Main { public static void main(String[] args) { Dog labrador = new Dog(); labrador.eat(); labrador.bark(); } }
输出
I eat dog food I can bark
对 labrador 调用 eat() 解析到 Dog 中重写的方法。
提示: @Override 注解虽非强制,但强烈推荐 —— 它让编译器检查是否真正重写了方法。
使用 super 访问父类
重写时,super 关键字可调用父类实现。
示例 3:在 eat() 中使用 super
class Animal { public void eat() { System.out.println("I can eat"); } } class Dog extends Animal { @Override public void eat() { super.eat(); System.out.println("I eat dog food"); } public void bark() { System.out.println("I can bark"); } } class Main { public static void main(String[] args) { Dog labrador = new Dog(); labrador.eat(); labrador.bark(); } }
输出
I can eat I eat dog food I can bark
此处 super.eat() 先调用 Animal 定义的方法,再执行子类逻辑。
同样,super 可调用父类构造器。
继承中的受保护成员
标记为 protected 的字段或方法,子类无论包位置均可访问。
示例 4:访问受保护成员
class Animal { protected String name; protected void display() { System.out.println("I am an animal."); } } class Dog extends Animal { public void getInfo() { System.out.println("My name is " + name); } } class Main { public static void main(String[] args) { Dog labrador = new Dog(); labrador.name = "Rocky"; labrador.display(); labrador.getInfo(); } }
输出
I am an animal. My name is Rocky
子类可自由读写受保护字段 name 并调用 display()。
为何使用继承?
- 代码复用: 子类自动继承父类所有 public 和 protected 成员。
- 多态性: 重写实现动态方法分派,是运行时多态的关键特性。
继承的类型
Java 支持五种概念上的继承模型,各适用不同场景。
1. 单继承
一个类仅继承一个父类。

2. 多层继承
子类成为另一类的父类,形成链式结构。

3. 分层继承
多个子类继承自同一父类。

4. 多重继承
Java 不允许类继承多个类,但接口提供实现此模式的途径。

注意: 多重继承可通过接口实现;详见 Java implements 多重继承。
5. 混合继承
两种或以上继承类型的组合 —— 例如结合分层与多重继承。

java
- 掌握 C# 继承:概念、类型与实战代码完全指南
- C++ 继承完全指南:构建可复用的强大类层次
- C# 继承完全指南:基类、派生类、初始化与多重继承替代方案
- 深入理解 Java final 关键字:变量、方法与类的不可变性
- Java instanceof 运算符完全指南:用法、继承与接口检查
- 深入理解 Java 静态嵌套类:用法、差异与实战示例
- 精通 Java 匿名内部类:定义、语法与实战示例
- Java 单例模式详解:安全实现与使用指南
- 精通 Java 反射:运行时检查类、方法与字段
- 掌握 Java ObjectOutputStream:序列化、核心方法与实战示例
- 掌握 Java 泛型:构建可复用、类型安全的代码
- 掌握 Java 文件操作:java.io 包下的创建、读取、写入与删除