大虾解释下

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


不负相思意
浏览 221回答 3
3回答

BIG阳

1,子类实例化时只会调用一次父类的构造函数,这是语言规范;2,你只能在子类构造函数中调用父类构造函数;3,super() 表示显示调用父类的构造函数,该方法主要是用于调用有参的父类构造函数,如果父类具有无参的构造函数,编译器会自动调用该无参构造函数,而不用你使用 super() 语句显示调用;

翻阅古今

因为你显示调用了父类的无参构造  super(); 当显示调用无参构造函数时 该函数执行一次class A { A() {  System.out.printf("A\n"); }}class B extends A { B() {    System.out.printf("B\n"); }}若不使用 super(); 显示调用的话 结果也是一样的

aluckdog

super(),没看到这个方法。你在初始化B b=new B();执行顺序是:先初始化基类A的构造函数,然后再执行B的构造函数。当然就执行System.out.printf("A\n");然后System.out.printf("B\n");
打开App,查看更多内容
随时随地看视频慕课网APP