好的阿杰 👍
我来帮你写一份 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️⃣ 继承的特点

  1. 单继承:Java 中一个类只能继承一个父类(但可以实现多个接口)。 class Dog extends Animal { ... } ✅ class Dog extends Animal, Pet { ... } ❌
  2. 多层继承(传递性)class Animal { ... } class Mammal extends Animal { ... } class Dog extends Mammal { ... } // Dog 继承了 Animal 的内容
  3. 构造方法不能继承,但子类构造时会调用父类构造方法。
  4. 私有成员不能继承,但子类可以通过 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️⃣ 实际应用场景

  1. 类层次建模:如 Animal -> Dog/CatShape -> Circle/Rectangle
  2. 框架源码:比如 Servlet 中 HttpServlet 继承 GenericServlet
  3. 模板设计:在父类写公共逻辑,子类实现差异化部分。

📝 总结

  • 继承关键字extends
  • 本质:子类复用父类的属性和方法,并可扩展/修改。
  • super:调用父类的属性/方法/构造。
  • 注意事项:单继承、构造方法不能继承、私有成员不可直接访问。
  • 最佳实践:合理使用继承,避免过度层次化。