Skip to content

继承

继承的核心作用是:让子类复用父类的属性和方法,并可以扩展或修改行为

基本语法

在 Java 中使用 extends 关键字实现继承。

JAVA
class Animal {
    String name;

    void eat() {
        System.out.println("动物在吃东西");
    }
}

class Dog extends Animal {
    void bark() {
        System.out.println("狗在叫");
    }
}
  • Java 只支持单继承
  • 除私有、构造方法不支持继承,其他的全部会被子类继承
  • 一个类没有显式继承任何类时,默认继承Object类

方法重写(Override)

当从父类中继承过来的方法无法满足子类的业务需求时,子类可以 重写父类方法

规则:

  • 方法名相同
  • 形参列表相同
  • 返回值相同或兼容【向上转型】
  • 访问权限不能更严格
java
class Animal {
    void sound() {
        System.out.println("动物发出声音");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("狗在叫");
    }
}
  • @Override注解用来标注方法,被标注的方法必须是重写父类的方法,如果不是重写的方法,编译器会报错。

  • @Override注解只在编译阶段有用,和运行期无关


  • 重写方法访问权限不能变低,可以变高。

  • 抛出的异常不能变多,可以变少

  • 方法覆盖针对的是实例方法,和静态方法无关。子类可以有同名静态方法。

java
class Parent {

    static void test() {
        System.out.println("Parent static method");
    }

}

class Child extends Parent {

    static void test() {
        System.out.println("Child static method");
    }

}
java
public class Main {
    public static void main(String[] args) {

        Parent p = new Parent();
        Child c = new Child();

        p.test();
        c.test();
    }
}
java
Parent static method
Child static method

继承的初始化顺序

创建子类对象时:

  1. 父类静态代码块
  2. 子类静态代码块
  3. 父类构造函数
  4. 子类构造函数
java
class A {
    static {
        System.out.println("A static");
    }

    A() {
        System.out.println("A constructor");
    }
}

class B extends A {
    static {
        System.out.println("B static");
    }

    B() {
        System.out.println("B constructor");
    }
}
java
new B();
java
A static
B static
A constructor
B constructor