为了账号安全,请及时绑定邮箱和手机立即绑定

大虾解释下

大虾解释下

不负相思意 2018-07-19 15:05:12
class A{ A() { System.out.printf("A\n");  }}class B extends A{  B() { super(); System.out.printf("B\n");  }}public class Constructor_Executive_Order { public static void main(String args[])  {  B b=new B(); }}输出的是AB为什么不是AAB
查看完整描述

3 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

1,子类实例化时只会调用一次父类的构造函数,这是语言规范;

2,你只能在子类构造函数中调用父类构造函数;

3,super() 表示显示调用父类的构造函数,该方法主要是用于调用有参的父类构造函数,如果父类具有无参的构造函数,编译器会自动调用该无参构造函数,而不用你使用 super() 语句显示调用;


查看完整回答
反对 回复 2018-07-23
?
翻阅古今

TA贡献1780条经验 获得超5个赞

因为你显示调用了父类的无参构造  super(); 当显示调用无参构造函数时 该函数执行一次

class A {
 A() {
  System.out.printf("A\n");
 }
}

class B extends A {

 B() {
  
  System.out.printf("B\n");
 }
}


若不使用 super(); 显示调用的话 结果也是一样的


查看完整回答
反对 回复 2018-07-23
?
aluckdog

TA贡献1847条经验 获得超7个赞

super(),没看到这个方法。

你在初始化B b=new B();

执行顺序是:先初始化基类A的构造函数,然后再执行B的构造函数。当然就执行

System.out.printf("A\n");然后

System.out.printf("B\n");


查看完整回答
反对 回复 2018-07-23
  • 3 回答
  • 0 关注
  • 220 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信