一道关于java中super的题

class C {
    C() {
        System.out.print("C");
    }
}
 
class A {
    C c = new C();
 
    A() {
        this("A");
        System.out.print("A");
    }
 
    A(String s) {
        System.out.print(s);
    }
}
 
class Test extends A {
    Test() {
        super("B");
        System.out.print("B");
    }
 
    public static void main(String[] args) {
        new Test();
    }
}

//输出  CBB

初始化过程是这样的: 

1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 

2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化; 

3.其次,初始化父类的普通成员变量和代码块,在执行父类的构造方法;

4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法; 

 

(1)初始化父类的普通成员变量和代码块,执行 C c = new C(); 输出C 

(2)super("B"); 表示调用父类的构造方法(A(String s)不调用父类的无参构造函数(A(),输出B 

(3) System.out.print("B"); 

 所以输出CBB


版权声明:本文为gtjsjj原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。