已经知道了“构造方法无法被继承”且“创建一个子类对象时会调用父类的构造方法”下面这段代码
当运行Test类的Main方法时加载了A,B,C三个类
那么"C c=new C();"时,是应当先调用根基类(A)的构造方法,然后再依次B,C“super会调用其直接父类的构造方法”
但是"super('xxx');"却是在C类的构造方法中,按照上面"A-B-C"的顺序应当最后才被指向其直接父类“B”的构造方法才对而结果却是
A
XXX-B望高人指点迷经class Test{ public static void main(String[] args)
{
C c=new C();
}
}class A{
A(){
System.out.println("A");
} A(String s){
System.out.println("XXX-A");
}
}class B extends A{
B(){
System.out.println("B");
} B(String s){
System.out.println("XXX-B");
}
}class C extends B{
C(){
super("XXX");
}
}运行结果为
A
XXX-B
当运行Test类的Main方法时加载了A,B,C三个类
那么"C c=new C();"时,是应当先调用根基类(A)的构造方法,然后再依次B,C“super会调用其直接父类的构造方法”
但是"super('xxx');"却是在C类的构造方法中,按照上面"A-B-C"的顺序应当最后才被指向其直接父类“B”的构造方法才对而结果却是
A
XXX-B望高人指点迷经class Test{ public static void main(String[] args)
{
C c=new C();
}
}class A{
A(){
System.out.println("A");
} A(String s){
System.out.println("XXX-A");
}
}class B extends A{
B(){
System.out.println("B");
} B(String s){
System.out.println("XXX-B");
}
}class C extends B{
C(){
super("XXX");
}
}运行结果为
A
XXX-B
以前还真没仔细考虑过这个问题呢。