gpt4 book ai didi

java - Inheritance中关于NEW Keyword的打印顺序是怎样的?

转载 作者:行者123 更新时间:2023-11-29 10:00:00 26 4
gpt4 key购买 nike

这实际上是我感到困惑的一个面试问题的一部分。

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

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


A a1 = new B();
System.out.println() ;
A a2 = (A) new B() ;

那么问题是打印出来的是什么?

起初我认为它应该打印出来

B
A

B
A

但在我回家后,它给了

A
B

A
B

我理解是继承然后将B向上转型为A,语法也是合法的,但是为什么A打印在B之前呢?

最佳答案

why is A print before B?

因为父类(super class)构造函数的主体基本上在子类构造函数的主体之前执行。

将您的 B() 构造函数视为隐式:

public B()
{
super(); // This invokes A's constructor
System.out.println("B") ;
}

完整的详细信息在 JLS 12.5 中.特别是:

This constructor does not begin with an explicit constructor invocation of another constructor in the same class (using this). If this constructor is for a class other than Object, then this constructor will begin with an explicit or implicit invocation of a superclass constructor (using super). Evaluate the arguments and process that superclass constructor invocation recursively using these same five steps.

关于java - Inheritance中关于NEW Keyword的打印顺序是怎样的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36342143/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com