【发布时间】:2016-03-31 19:33:00
【问题描述】:
这实际上是我感到困惑的一个面试问题的一部分。
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 之前打印?
【问题讨论】:
-
如果构造函数是
super(); System.out.println("B");,我会预料到这一点,但现在我很困惑。 -
@Gendarme:没有任何明确的
super(...)或this(...),super()是隐含的。 -
必须始终先初始化超类。
标签: java inheritance constructor upcasting