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构造函数。