2016-03-02 58 views
3

任何人都可以解释这个构造函数调用是如何工作的。因为我是假设,它应该从类从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 

回答

5

派生类的每个构造首先构造它的基类:因此,首先创建类B的一个对象,导致A()被首先被调用。然后你创建一个C类对象,导致A()和B()被首先调用。

0

你首先需要理解的是:在扩展类构造函数之前调用基类构造函数。

在这里,我们走,从主开始:

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

使B对象:第一

  1. 调用类的构造函数//输出:你好,从A类
  2. 电话B级//打印后的构造函数:来自B类的你好

现在B对象被创建,我们可以将它传递到new C(new b());

使C的对象:

  1. 调用类的构造函数第一//输出:你好,从A级
  2. 调用B类构造函数second //打印:来自B类的hello
  3. 调用C类构造函数last //打印:来自类C的hello

这给了我们预期的输出如下:

hello from class A 
hello from class B 
hello from class A 
hello from class B 
hello from class C 
相关问题