public class Start {
public static void main(String[] args) {
Sub ob = new Sub();
System.out.println(ob + " bbb");
}
}
class Sub extends Father {
public Sub() {
// super(); 与下面这行代码为什么会有不同的输出。它们不都是调用 Father 的构造函数吗?
new Father();
System.out.println("Hello World.");
}
}
class Father {
public Father() {
System.out.println(this + " aaa");
}
}
问题就在 注释中
------解决方案--------------------
这完全不是一回事。调用super方法,只是当前对象调用父类的构造方法而已。
但是new Father(),则是重新构造了一个父类的对象,则一共构造了两个对象了。
------解决方案--------------------
楼上说的都对,
我说的再通俗点,如果你不在Sub的构造类里显示调用super(),JVM会自动给你加上super(),即自动调用父类的无参构造型,所以这里你写那个super()跟不写没差别
如果Father里你声明一个有参数的构造型,例如Father(int i),而不声明无参的构造型,这时候你的Sub构造型里就必须自己显示的调用super(int i)了,你感受一下