这个构造函数调用是如何工作的?

时间:2016-03-02 22:28:24

标签: java constructor

任何人都可以解释这个构造函数调用是如何工作的。因为我假设它应该打印

  

你好,来自A班

     

你好,来自B班

     

你好,来自C班

我在这里很困惑。任何帮助表示赞赏。以下是我的代码。

public class A {
   A(){
    System.out.println("hello from class A");
  }
}

public class B extends A {
  B(){
    System.out.println("hello from class B");
    }
 }

public class C extends B {
 C(B b){    
     System.out.println("hello from class C");
    }
   public static void main(String[] args) {
    new C(new B());
    }
 }

  //result

  hello from class A
  hello from class B
  hello from class A
  hello from class B
  hello from class C

2 个答案:

答案 0 :(得分:5)

派生类的每个构造函数首先构造其基类:首先,创建一个B类对象,导致首先调用A()。然后创建一个C类对象,首先调用A()和B()。

答案 1 :(得分:0)

首先需要了解的内容:在扩展类构造函数之前调用基类构造函数。

我们走了,从主要开始:

new C(new B()); // new B() is created first before being passed to C

制作B对象:

  1. 首先调用类构造函数//从类A打印:hello
  2. 在//打印后调用B类构造函数:来自B类的hello
  3. 现在创建了B对象,我们可以将它传递给main

    中的new C(new b());

    制作C对象:

    1. 首先调用类构造函数//从类A打印:hello
    2. 第二个调用B类构造函数//打印:来自B类的hello
    3. 最后调用C类构造函数//打印:来自C类的hello
    4. 这为我们提供了预期的以下输出:

      hello from class A
      hello from class B
      hello from class A
      hello from class B
      hello from class C