java中带super关键字的递归
考虑以下代码:java中带super关键字的递归,java,class,object,recursion,super,Java,Class,Object,Recursion,Super,考虑以下代码: public class TestClass { TestClass() { super(); System.out.printf("yes it is called"); } public static void main(String[] args) { new TestClass(); } } 现在,随着匿名对象的创建,它将调用构造函数。现在有了super,它又称之为self,这个过程再次重复。这应该
public class TestClass
{
TestClass()
{
super();
System.out.printf("yes it is called");
}
public static void main(String[] args)
{
new TestClass();
}
}
现在,随着匿名对象的创建,它将调用构造函数。现在有了super,它又称之为self,这个过程再次重复。这应该会创建无限递归,但事实并非如此。为什么?这不是递归。在构造函数中,调用
super()代码>调用超类构造函数,而不是它本身
如果你说this()在该构造函数中,编译器会将“递归构造函数调用”捕获为编译器错误。super()
在您的情况下,只需调用新对象()
(所有java类都继承自对象类),无论如何都会发生这种情况。这里没有递归super()引用超类,您正在调用对象
的构造函数
如果要进行这种无限递归,您将使用this
public class SomeClass {
public SomeClass() {
this(); //recursion!
}
}
当然,这是一个编译错误。super()调用超类的无参数构造函数。如果不指定超类,则该超类是隐式对象。因此它调用对象类的无参数构造函数。super()
调用它从中继承的对象的构造函数,而不是它本身。在您的情况下,您为什么认为super
调用自构造函数?(另外,super
总是隐式调用),它调用对象
构造函数。@rgetman此TestClass本身是一个超类,而该构造函数不是参数构造函数。所以super()不调用它的超类的arg构造函数,这个超类与它本身是同一个构造函数,那么为什么不递归呢?不,没有一个类可以是它自己的超类。和newtestclass()
不创建TestClass
的匿名子类的实例,它只创建TestClass
的实例。即使有,它也会有自己的隐式无参数构造函数,隐式调用TestClass
no-arg构造函数,其显式super()
将调用对象的no-arg构造函数。