继承

继承

一、继承语法

public class Derived extends Base{
	// ...
}
  • 注意:Java中不支持多继承

二、重写(覆盖)

  1. 子类对父类的方法进行重写,返回值和形参都不能改变
  2. 访问权限不能比父类中被重写的方法的访问权限更低
  3. 父类被static、private修饰的方法、构造方法都不能被重写
  4. 可以使用 @Override 注解来显式指定

三、super

若子类中存在与父类同名的成员,子类对象默认访问的是子类的成员

可以使用super.a来访问父类的成员

  • 注意:同名成员没有真的被覆盖,只是就近原则不加super无法访问
class Base {
    int c = 18;
    void print() {
        System.out.println("Base:");
        System.out.println("c:" + c);
    }
}
class Derived extends Base {
    int c = 28;
    @Override
    void print() {
        super.print();
        System.out.println("Derived:");
        System.out.println("c:" + c);
    }
}

四、子类构造

  1. 子类实例化时先调用构造父类再构造子类
  2. 若父类存在无参构造,则子类构造自动隐式调用super()构造
  3. 若父类不存在无参构造,则子类需要在第一条语句显示调用
class Base {
    int a = 18;
    Base(int a) {
        System.out.println("Base Constructor()");
        this.a = a;
    }
}
class Derived extends Base {
    Derived() {
        super(10); // 先构造父类
        System.out.println("Derived Constructor()");
    }
}
  • super和this都必须是构造方法中的第一条语句,所以不能同时存在

五、代码块的执行

  1. Base:静态代码块执行
  2. Derived:静态代码块执行
  3. Base:实例代码块执行
  4. Base:构造方法执行
  5. Derived:实例代码块执行
  6. Derived:构造方法执行

六、final

  1. 修饰成员变量必须给初值

    public final int a = 10;
    
  2. 修饰类,表示类不能被继承

    final class A{}
    
  3. 修饰方法,表示该方法不能被覆盖(Override)

    final void func(){}
    
posted @ 2023-05-17 22:57  白小鸭  阅读(27)  评论(0)    收藏  举报