继承
继承
一、继承语法
public class Derived extends Base{
// ...
}
- 注意:Java中不支持多继承
二、重写(覆盖)
- 子类对父类的方法进行重写,返回值和形参都不能改变
- 访问权限不能比父类中被重写的方法的访问权限更低
- 父类被static、private修饰的方法、构造方法都不能被重写
- 可以使用 @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);
}
}
四、子类构造
- 子类实例化时先调用构造父类再构造子类
- 若父类存在无参构造,则子类构造自动隐式调用super()构造
- 若父类不存在无参构造,则子类需要在第一条语句显示调用
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都必须是构造方法中的第一条语句,所以不能同时存在
五、代码块的执行
- Base:静态代码块执行
- Derived:静态代码块执行
- Base:实例代码块执行
- Base:构造方法执行
- Derived:实例代码块执行
- Derived:构造方法执行
六、final
-
修饰成员变量必须给初值
public final int a = 10; -
修饰类,表示类不能被继承
final class A{} -
修饰方法,表示该方法不能被覆盖(Override)
final void func(){}

浙公网安备 33010602011771号