class Super
{
Super()
{
System.out.println("This is Super Constructor");
}
}
class Sub extends Super
{
Sub()
{
//super() is automatically added by the compiler here!
System.out.println("This is Sub Constructor");
//super(); I can't define it here coz it needs to be the first statement!
}
}
class Test
{
public static void main(String...args)
{
Sub s2=new Sub();
}
}
输出:
这是Super Constructor
这是Sub Constructor
无论如何要这样做?
或者你不能在Super()之前访问Sub()?
我知道Super Class或Inherited Classes首先被初始化,然后是子类,只是为了学习目的!
答案 0 :(得分:2)
在构造函数中,编译器将始终添加对super()
的调用
如果您没有自己提供此电话,请为您服务。
如果你看一个反编译器,你的Sub构造函数将如下所示:
Sub()
{
super();
System.out.println("This is Sub Constructor");
}
所以不,这是不可能的。
答案 1 :(得分:0)
它将始终首先调用基类构造函数(父),然后调用初始类(子)。在您的情况下,super()
将首先执行。
好读:Which executed first, The parent or the child constructor?
答案 2 :(得分:0)
其他答案说不可能。不确定为什么要尝试这样做但更好地重新考虑您的实现,因为您总是希望确保继承字段首先被初始化,因为子类实现可能依赖于它。
答案 3 :(得分:0)
如上所述,总是调用超级构造函数。也许你应该重写你的问题并解释,为什么你需要它。
答案 4 :(得分:0)
这是一个简单的答案。 继承的概念是关于 IS-A 的关系。 从技术上讲,Dog class是Animal Class的孩子。 。 。 在创建对象时,Dog类首先是 ANIMAL ,然后才被归类为 DOG
...希望这能澄清事情。 。所以不可能按你提出的方式去做