this、super问题急求解
public class Test {
public static void main(String [] args) {
Child c = new Child();
}
}
class Father {
public Father() {
System.out.println("父类无参构造函数");
}
public Father(String name) {
System.out.println("父类有参构造函数");
}
}
class Child extends Father {
public Child() {
this("dd");
System.out.println("子类无参构造函数");
}
public Child(String name) {
super("dd");
System.out.println("子类有参构造函数");
}
}
结果为什么是这样呢?
------解决方案--------------------public class Test
{
public static void main(String[] args)
{
Child c = new Child(); //第一步:生成对象,调用子类构造方法;
}
}
class Father
{
public Father()
{
System.out.println("父类无参构造函数");
}
public Father(String name)
{
//第四步:打印;
System.out.println("父类有参构造函数");
}
}
class Child extends Father
{
public Child()
{
this("dd"); //第二步,调用Child类的有参构造方法;
System.out.println("子类无参构造函数");
}
public Child(String name)
{
super("dd"); //第三步,调用父类的有参构造方法;
System.out.println("子类有参构造函数");
}
}
所以从最里层开始打印;
------解决方案--------------------回答你这个问题前,先告诉你一个继承里面关于子父类各自的构造函数继承的问题,子类继承父类,子类的构造函数默认第一行是super() 如果你写了 this (X) 或者是 super(X) 其中里面的super(X) 是父类有参数构造, 那么它的默认的super() 就会被你写的覆盖了, 你这题是先创建一个子类对象,并且new Child();是无参数构造 ,他就会去找子类的无参数构造,结果执行第一行 发现了this(“dd”),就会调用本类的有参数构造,到了有参数构造中发现了super(“dd”)‘于是去找父类有参构造,打印了第一句,在打印子类有参构造,之后回到子类无参构造打印最后一句