7. 子类初始化
• 参考:
Class A Note: 以创建一个C类对象为例
C c = new C();
2 extends 3
需要按如下顺序执行:
Class B 1, 先需要对C的基类B进行初始化;
2, B还有基类A, 先进行基类A的初始化;
3, A初始化完毕, 执行B的初始化;
1 extends 4 4, B初始化完毕, 执行C的初始化
Class C
8. super关键字
• 默认情况下初始化子类时会调用父类的默
认构造器, 可以在子类的构造器中通过super
调用指定的父类构造器, 比如:
Class A {
A() {...}
A(int i) {...}
}
Class B {
B(int i) {super(i); ...} // 调用基类的A(int)构造器
}
• 示例: demo/Demo4.java
9. 委托
Delegation
• 委托是介于继承和组合之间的重用方式, 通过保存某个
类对象的引用(组合), 并且提供与该类相同的接口(继承),
示例:
Class A {
void f1(int i) {...}
String f2() {...}
}
Class B {
A a = new A(); // 保存A对象的引用
void f1(int i) {a.f1(i);} // 一致的接口, 并调用A的方法
String f2() {return a.f2();}
}
• 示例: demo/Demo5.java
10. @Override注解
• @Override注解用于表示子类覆盖了基类中的某个方法,
如果实际没有发生覆盖, 那么会产生编译错误, 示例:
class A {
void f1() {...}
void f2(int i) {...}
}
class B extends A {
@Override void f1() {...}
// @Override void f2(String s) {...} // 编译错误, 重载而非覆盖
}
19. final属性
• 将属性声明为final,
1), 如果属性在声明时进行了初始化, 那么该属
性不能被重新赋值; eg:
final int i = 0; // i 不能被重新赋值
2), 如果声明时没有初始化(Blank final), 那么必
须在构造器中对该属性进行初始化; eg:
class A {
final int i;
A() {
i = 3;
}
}
• final经常与static结合使用用于声明常量(Constants), eg:
public static final int VALUE_ONE = 1;
• 示例: demo/Demo10.java