好的阿杰 👍
我来帮你写一份 Java 继承(Inheritance)详解,从概念、语法到应用场景一步步拆解,让你轻松掌握。
🟦 Java 继承详解
1️⃣ 什么是继承?
继承(extends
)是 面向对象三大特性(封装、继承、多态)之一。
它允许一个类(子类)复用另一个类(父类/超类)的属性和方法,并进行扩展或修改。
👉 通俗理解:
- 父类:定义“通用功能”。
- 子类:在此基础上“添加/修改功能”。
- 类比:手机📱 → 智能手机(继承了打电话功能 + 增加上网、拍照功能)。
2️⃣ 基本语法
// 父类
class Animal {
String name;
public void eat() {
System.out.println("动物在吃东西");
}
}
// 子类
class Dog extends Animal {
public void bark() {
System.out.println("汪汪汪!");
}
}
public class TestInheritance {
public static void main(String[] args) {
Dog dog = new Dog();
dog.name = "旺财"; // 继承父类的属性
dog.eat(); // 继承父类的方法
dog.bark(); // 子类自己的方法
}
}
👉 输出:
动物在吃东西
汪汪汪!
3️⃣ 继承的特点
- 单继承:Java 中一个类只能继承一个父类(但可以实现多个接口)。
class Dog extends Animal { ... } ✅ class Dog extends Animal, Pet { ... } ❌
- 多层继承(传递性):
class Animal { ... } class Mammal extends Animal { ... } class Dog extends Mammal { ... } // Dog 继承了 Animal 的内容
- 构造方法不能继承,但子类构造时会调用父类构造方法。
- 私有成员不能继承,但子类可以通过
public/protected
方法间接访问。
4️⃣ super 关键字
super
用于 调用父类的属性、方法和构造方法。
class Animal {
String name = "动物";
public void eat() {
System.out.println("动物在吃东西");
}
}
class Dog extends Animal {
String name = "狗";
public void showName() {
System.out.println(name); // 狗(子类的)
System.out.println(super.name); // 动物(父类的)
}
@Override
public void eat() {
super.eat(); // 调用父类的方法
System.out.println("狗在啃骨头");
}
}
5️⃣ 构造方法与继承
- 子类构造方法会 默认调用父类的无参构造方法。
- 如果父类没有无参构造方法,子类必须用
super(...)
显式调用父类有参构造。
class Animal {
Animal(String name) {
System.out.println("父类构造: " + name);
}
}
class Dog extends Animal {
Dog() {
super("旺财"); // 必须显式调用
System.out.println("子类构造: Dog");
}
}
6️⃣ 方法重写(Override)
子类可以重写父类的方法,实现自己的逻辑。
要求:
- 方法名、参数列表相同。
- 返回类型相同(或是父类返回类型的子类)。
- 访问修饰符不比父类更严格。
- 可以加
@Override
注解,避免错误。
7️⃣ 继承的优缺点
✅ 优点
- 代码复用,减少冗余。
- 提高可维护性和扩展性。
- 配合多态,实现灵活的程序设计。
⚠️ 缺点
- 父子类耦合度高,改动父类可能影响子类。
- 滥用继承会导致层级复杂,不如组合更灵活。
👉 经验法则:能用“组合”解决的,不一定要用继承。
8️⃣ 实际应用场景
- 类层次建模:如
Animal -> Dog/Cat
,Shape -> Circle/Rectangle
。 - 框架源码:比如 Servlet 中
HttpServlet
继承GenericServlet
。 - 模板设计:在父类写公共逻辑,子类实现差异化部分。
📝 总结
- 继承关键字:
extends
。 - 本质:子类复用父类的属性和方法,并可扩展/修改。
- super:调用父类的属性/方法/构造。
- 注意事项:单继承、构造方法不能继承、私有成员不可直接访问。
- 最佳实践:合理使用继承,避免过度层次化。
发表回复