当一个类被初始化的时候,发现它的父类尚未初始化,会先去初始化父类;
重写方法的访问修饰符只能扩大或同等,不能缩小
重写方法的异常抛出只能越是精确的异常,而不能抛出更大范围的异常,精确的程度可以直到没有异常抛出。
/**
* @author Cherish
* @version 1.0
* @date 2017/8/27 16:32
*/
public class Main {
public static void main(String[] args) {
B a = new B();
A b = new B("ssss");
}
static class A {
static {
System.out.print("static A,");
}
public A(){
System.out.print("construct A,");
}
protected void aa() throws RuntimeException {
System.out.println("aa");
}
}
static class B extends A {// 若父类尚未初始化,得首先初始化父类
static {
System.out.print("static B,");
}
public B(){
System.out.print("construct B,");
}
public B(String s) {
System.out.print("construct B, s = " + s);
}
// 访问修饰符只能是扩大
public void aa() {// 抛异常,是越精确(这里如果抛出Exception是错误的),直至可以没有异常
System.out.println("true = " + true);
}
}
}
上面的代码运行得到如下的输出内容
static A,static B,construct A,construct B,construct A,construct B, s = ssss