Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这个构造函数调用是如何工作的?_Java_Constructor - Fatal编程技术网

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

Java 这个构造函数调用是如何工作的?,java,constructor,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"); } }

有人能解释一下这个构造函数调用是如何工作的吗。因为我假设它应该打印出来

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

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

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

我们开始吧,从main开始:

new C(new B()); // new B() is created first before being passed to C
制作B对象:

  • 首先调用类构造函数//打印:来自类A的hello
  • 在//prints:hello from class B之后调用B类构造函数

  • 既然已经创建了B对象,我们就可以将它传递到
    newc(newb())在主菜单中

    制作C对象:

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

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