java解惑

java解惑

1. 子类的构造函数问题

public class Constructor {
    public static void main(String[] args) {
        new foo3();
        new foo3("Aloha");
    }
}

class foo{
  foo(){System.out.println("foo...");}
  foo(String s){System.out.println("foo..."+s);}
}

class foo1 extends foo{
  foo1(){System.out.println("foo1...");}
  foo1(String s){System.out.println("foo1..."+s);}
}

class foo2 extends foo1{
  foo2(){System.out.println("foo2...");}
  foo2(String s){System.out.println("foo2..."+s);}
}

class foo3 extends foo2{
  foo3() {System.out.println("foo3...");}   
  foo3(String s){System.out.println("foo3..."+s);}
}

运行结果:

foo...
foo1...
foo2...
foo3...
foo...
foo1...
foo2...
foo3...Aloha

解释:

​ 当子类创建新对象时首先调用父类的无参构造方法。

new foo3();构造方法调用顺序为foo()–>foo1()–>foo2()–>foo3();

new foo3("Aloha");构造方法调用顺序为foo()–>foo1()–>foo2()–>foo3(“Aloha”);

​ 我的理解:构造方法中的隐藏了super();方法在自己的构造方法体中(即隐式调用父类无参构造方法),如下

foo3(String s){
  super();      //显式调用
  System.out.println("foo3..."+s);
}

​ 即子类构造方法默认调用父类的无参构造方法。

Attention:

​ 如果显式调用父类的构造方法必须将父类构造方法放在子类构造方法句首,不能像这样:

foo3(String s){
  System.out.println("foo3..."+s);
  super(s);     //编译将会无法通过
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值