当前位置: 代码迷 >> J2SE >> 关于 Super 关键字的1点疑惑
  详细解决方案

关于 Super 关键字的1点疑惑

热度:583   发布时间:2016-04-23 20:34:55.0
关于 Super 关键字的一点疑惑
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)了,你感受一下
  相关解决方案