、
99. Java 继承(Inheritance)
1. 什么是继承?
在 Java
语言中,继承是一种允许类从其他类派生并复用其字段和方法的机制。
📌 继承的基本概念
- 子类(
Subclass
):从另一个类派生的类(又称派生类、扩展类)。 - 超类(
Superclass
):被继承的类(又称基类或父类)。 - 单继承(
Single Inheritance
) :Java
仅支持单继承,即每个类只能直接继承一个超类。 Object
类 :所有类的祖先,未指定父类时,默认继承自Object
。
继承的好处:
- 代码复用 ✅ 避免重复编写相同代码。
- 层次结构 🚀 建立逻辑清晰的类体系。
- 可扩展性 🎯 通过子类扩展父类功能。
2. 继承示例
🎭 Bicycle
(自行车)类
java
public class Bicycle {
// Bicycle 类包含三个字段
public int cadence;
public int gear;
public int speed;
// 构造方法
public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}
// 调整踏频
public void setCadence(int newValue) {
cadence = newValue;
}
// 调整档位
public void setGear(int newValue) {
gear = newValue;
}
// 减速
public void applyBrake(int decrement) {
speed -= decrement;
}
// 加速
public void speedUp(int increment) {
speed += increment;
}
}
🚵 MountainBike
(山地自行车)类
MountainBike
继承 Bicycle
,并增加了 seatHeight
字段和 setHeight()
方法。
java
public class MountainBike extends Bicycle {
// 新增字段:座椅高度
public int seatHeight;
// 构造方法,调用父类构造方法
public MountainBike(int startHeight, int startCadence, int startSpeed, int startGear) {
super(startCadence, startSpeed, startGear);
seatHeight = startHeight;
}
// 设置座椅高度
public void setHeight(int newValue) {
seatHeight = newValue;
}
}
3. 继承的关键点
🔹 1. 使用 super
关键字
super
关键字用于调用父类的构造方法或方法。- 在子类构造方法中,
super(...)
必须是第一行。
java
public MountainBike(int startHeight, int startCadence, int startSpeed, int startGear) {
super(startCadence, startSpeed, startGear); // 调用父类构造方法
seatHeight = startHeight;
}
🔹 2. 方法重写(Overriding)
- 子类可以重写(override)父类的方法。
- 使用
@Override
注解可以避免拼写错误。
java
@Override
public void speedUp(int increment) {
speed += increment * 2; // 速度加倍
}
🔹 3. 访问修饰符的影响
修饰符 | 同一类 | 同一包 | 子类 | 其他包 |
---|---|---|---|---|
public |
✅ | ✅ | ✅ | ✅ |
protected |
✅ | ✅ | ✅ | ❌ |
default (无修饰符) |
✅ | ✅ | ❌(同包子类可访问) | ❌ |
private |
✅ | ❌ | ❌ | ❌ |
🔹 4. final
关键字
final
修饰类:不能被继承。final
修饰方法:不能被子类重写。
java
final class RoadBike extends Bicycle { }
4. 继承的实际应用
🌟 示例:使用继承创建不同类型的车辆
java
// 父类:Vehicle(交通工具)
class Vehicle {
public void move() {
System.out.println("交通工具正在移动...");
}
}
// 子类:Car(汽车)
class Car extends Vehicle {
@Override
public void move() {
System.out.println("汽车正在行驶...");
}
}
// 子类:Bike(自行车)
class Bike extends Vehicle {
@Override
public void move() {
System.out.println("自行车正在骑行...");
}
}
public class TestInheritance {
public static void main(String[] args) {
Vehicle v1 = new Car();
Vehicle v2 = new Bike();
v1.move(); // 输出:汽车正在行驶...
v2.move(); // 输出:自行车正在骑行...
}
}
5. 总结
✅ 继承让代码更清晰、可复用性更高。 🚀 使用 super
关键字调用父类构造方法或方法。 🎯 方法重写可以定制子类行为,但要注意访问修饰符的作用。 ⚠ final
关键字可以防止继承和重写,合理使用。
通过继承,我们可以构建更有组织、可扩展的 Java 应用程序,减少代码重复,让代码更易于维护!💡