Sur*_*raj 5 java constructor class
我试图理解
为什么this()和super()不能一起使用?
我已经在stackoverflow上阅读了很多相关的讨论,并且理解了很多东西.但我只有一个困惑是.
在构造函数中调用this()隐式调用super()
考虑这段代码..
class Top
{
int z;
Top()
{
System.out.println("Top default constructor");
}
}
class A extends Top
{
int x;
A(int num)
{
x=num;
System.out.println("A parameterized constructor");
}
A()
{
this(5);
System.out.println("A default constructor");
}
public static void main(String arg[])
{
new A();
}
}
Run Code Online (Sandbox Code Playgroud)
和OUTPUT是:
顶级默认构造函数
参数化构造函数
默认构造函数
我没想到输出" Top default constructor " 的第一行,因为没有super()调用,隐式或显式.
所以可能有一些我误解的东西.请解释.
在构造函数中调用this()是否隐式调用super()?
调用this()构造函数将调用该类的零参数构造函数.如果该类的zero-args构造函数没有显式调用super(...),那么是的,将会对zero-args 构造函数进行隐式调用super().如果你的类中的零参数构造函数显式调用了其他一些super签名,那么当然这样做了.
对于一般的构造函数来说,这是正确的.在你的A类中,由于你的A(int)构造函数没有任何对this() or的 调用super(),所以隐式super()完成.
我没想到输出"Top default constructor"中的第一行,因为没有
super()调用,隐式或显式.
是的,有一个隐含的.:-)
基本规则是这样的:一些基类构造函数必须在派生类运行的代码之前运行.这就是调用this(...)或super(...)必须是构造函数中的第一件事的原因.如果构造函数没有显式调用super(...),则总是隐式调用super()(没有args).
在构造函数内部调用this()会调用同一类的另一个构造函数。另一个构造函数将调用构造super()函数(隐式或显式),这就是为什么您不能在同一个构造函数中同时调用this()和super(),因为这会导致super()调用两个构造函数。
请注意,每当我编写this()或super()我并不一定意味着调用无参数构造函数(除了隐式调用,super()它总是对超类的无参数构造函数,如 Joeblade 所评论)。两个调用都可以有参数。
在您的代码示例中,A()构造函数调用A(int)构造函数(这就是this(5)所做的),构造函数Top()隐式调用(无参数)构造函数。