目录

  1. 什么是继承?
  2. Java 继承的基本语法
  3. 继承的特点
  4. super 关键字
  5. 方法重写(Override)
  6. 继承的构造方法调用
  7. final 关键字与继承
  8. 多层继承与类层次结构
  9. 抽象类与继承
  10. 接口与继承的区别
  11. 参考资料
  12. 出站链接

1. 什么是继承?

继承(Inheritance) 是面向对象编程(OOP)中的一个重要概念,允许**一个类(子类)继承另一个类(父类)**的属性和方法,提高代码复用性。

继承的优点

  • 代码复用:减少冗余代码,提高维护性。
  • 可扩展性:通过子类扩展父类功能。
  • 增强可读性:建立清晰的类层次结构。

2. Java 继承的基本语法

语法: 使用 extends 关键字

class 父类 { }
class 子类 extends 父类 { }

例子:

// 父类
class Animal {
    String name = "动物";

    void makeSound() {
        System.out.println("动物发出声音");
    }
}

// 子类继承 Animal
class Dog extends Animal {
    void bark() {
        System.out.println(name + ":汪汪汪!");
    }
}

public class InheritanceExample {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.makeSound(); // 继承父类方法
        dog.bark(); // 子类新方法
    }
}

输出

动物发出声音
动物:汪汪汪!


3. 继承的特点

  1. Java 只支持单继承(一个子类只能继承一个父类)。
  2. 支持多层继承(子类可以继续作为父类被继承)。
  3. 子类继承父类的所有非私有成员private 不可继承)。
  4. 子类可以重写父类的方法(使用 @Override 注解)。

4. super 关键字

super 关键字用于调用父类的构造方法或方法

例子:调用父类方法

class Animal {
    void makeSound() {
        System.out.println("动物叫声");
    }
}

class Dog extends Animal {
    void makeSound() {
        super.makeSound();  // 调用父类方法
        System.out.println("狗叫:汪汪!");
    }
}

public class SuperExample {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.makeSound();
    }
}

输出

动物叫声
狗叫:汪汪!


5. 方法重写(Override)

子类可以重写父类的方法,修改实现逻辑。

重写规则

  • 方法名相同,参数列表相同
  • 返回值不能比父类更严格(但可以是父类返回类型的子类)。
  • 访问权限不能更严格(如父类 protected,子类不能改为 private)。
  • 必须使用 @Override 注解(可选,但推荐)。

例子:

class Animal {
    void makeSound() {
        System.out.println("动物叫声");
    }
}

class Cat extends Animal {
    @Override
    void makeSound() {
        System.out.println("猫叫:喵喵!");
    }
}

public class OverrideExample {
    public static void main(String[] args) {
        Animal cat = new Cat();
        cat.makeSound(); // 调用子类重写的方法
    }
}

输出

猫叫:喵喵!


6. 继承的构造方法调用

子类的构造方法默认会调用父类的无参构造方法,如果父类没有无参构造,则必须使用 super() 调用父类的构造方法。

例子:

class Parent {
    Parent() {
        System.out.println("父类构造方法");
    }
}

class Child extends Parent {
    Child() {
        super(); // 显式调用父类构造方法
        System.out.println("子类构造方法");
    }
}

public class ConstructorExample {
    public static void main(String[] args) {
        new Child();
    }
}

输出

父类构造方法
子类构造方法


7. final 关键字与继承

修饰符作用
final 不能被继承
final 方法不能被子类重写
final 变量变为常量,不能被修改

例子:

final class Animal { }  // 无法继承
class Dog extends Animal { } // 编译错误

class Parent {
    final void show() {
        System.out.println("父类方法");
    }
}

class Child extends Parent {
    void show() { // 编译错误,不能重写 final 方法
        System.out.println("子类方法");
    }
}


8. 多层继承与类层次结构

class Animal {
    void eat() {
        System.out.println("动物吃食物");
    }
}

class Mammal extends Animal {
    void walk() {
        System.out.println("哺乳动物行走");
    }
}

class Human extends Mammal {
    void speak() {
        System.out.println("人类会说话");
    }
}

public class MultiLevelExample {
    public static void main(String[] args) {
        Human human = new Human();
        human.eat();
        human.walk();
        human.speak();
    }
}


9. 抽象类与继承

抽象类(abstract 不能实例化,子类必须实现其 abstract 方法。

abstract class Animal {
    abstract void makeSound();
}

class Dog extends Animal {
    void makeSound() {
        System.out.println("狗叫:汪汪!");
    }
}

public class AbstractExample {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.makeSound();
    }
}


10. 接口与继承的区别

特性继承(extends)接口(implements)
继承数单继承多实现
是否包含实现可继承具体方法只能声明方法
关键字extendsimplements
主要作用代码复用规范约束

11. 参考资料


12. 出站链接