首页 新闻 搜索 专区 学院

大虾解释下

0
悬赏园豆:5 [已解决问题] 解决于 2010-08-19 00:59

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();
 }
}

输出的是

A

B

为什么不是

A

A

B

!~!的主页 !~! | 初学一级 | 园豆:195
提问于:2010-08-18 00:50
< >
分享
最佳答案
0

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

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

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

收获园豆:5
Launcher | 高人七级 |园豆:45045 | 2010-08-18 09:37
其他回答(5)
0

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

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

class B extends A {

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


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

tandly | 园豆:17 (初学一级) | 2010-08-18 08:04
0

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

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

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

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

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

邢少 | 园豆:10926 (专家六级) | 2010-08-18 08:21
0

初始化的时候,已经调用了基类的构造函数,不加super也可以。

Astar | 园豆:40805 (高人七级) | 2010-08-18 08:35
0

在new一个子类的时候,在调用子类的构造方法前需要先去调用父类的构造方法(很容易理解,就像生活中必须先有父亲再有儿子),默认情况下如果你不显式调用父类构造方法的话,编译器会也会自动生成一个super()来调用父类的无参构造方法,你显式调用的话,那编译器就不会生成默认的super()了!

所以先调用父类的构造方法输出 A

再调用子类的构造方法输出 B

yixin841210 | 园豆:1138 (小虾三级) | 2010-08-18 09:00
0

继承自父类,当调用构造方法时,加不加super()效果都是一样的

LiecoLin | 园豆:210 (菜鸟二级) | 2010-08-18 09:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册