class Base1{
Base1(){
System.out.println("Base1");
}
}public class Sub extends Base1{
Sub(){
super();
System.out.println("Sub");
}
public static void main(String[] args) { Sub sub=new Sub();
}}为什么输出结果是:
Base1
Sub
而不是两个Base1呢?
Base1(){
System.out.println("Base1");
}
}public class Sub extends Base1{
Sub(){
super();
System.out.println("Sub");
}
public static void main(String[] args) { Sub sub=new Sub();
}}为什么输出结果是:
Base1
Sub
而不是两个Base1呢?
首先会调用父类的默认构造函数,输出一次base1,然后调用super()又输出一次base1.。。
为啥会调用父类的默认构造器?只有super()的时候调用一次吧
输出一次base1,然后调用super()又输出一次base1.。。
所以这里应该是只输出一次base1
然后在System.out.println("Sub");
所以是Base1,Sub
子类不会再调用父类的默认构造函数
子类不会再调用父类的默认构造函数 正确,就是这个原因
new Sub() 时,你在sub的空参构造里调用了 super()和输入了 System.out.println("Sub");。
程序会执行super()。也就是调用你的父类,在那的父类里又有一个空参的构造
Base1(){
System.out.println("Base1");
}
程序会执行Base1(),也就会输出第一个“Base1”。
接着程序会执行
Sub(){
super();//上一步执行过了
System.out.println("Sub");
}
中的System.out.println("Sub");
也就会输出“Sub”。
所以结果是
Base1
Sub
Base1(){
System.out.println("Base1");
}
}public class Sub extends Base1{
Sub(){
super();
System.out.println("Sub");
}
public static void main(String[] args) { Sub sub=new Sub();
}}AND class Base1{
Base1(){
System.out.println("Base1");
}
}public class Sub extends Base1{
Sub(){
System.out.println("Sub");
}
public static void main(String[] args) { Sub sub=new Sub(); }}have the same result
public static void main(String[] args) { Sub sub=new Sub(); }
你在new sub 对象的时候 ,首先自动的调父类的构造,然后在调它本身的构造。所以结果会是
Base1
Sub