这个类中的构造函数在哪里?

use*_*466 0 java constructor

public class EqualsTest {
  public static <T> boolean equalTest(T o1, T o2) {
      return o1.equals(o2);
  }
  public static void main(String[] args) {
      EqualsTest et1 = new EqualsTest();
      EqualsTest et2 = new EqualsTest();
      System.out.println(et1.equals(et2));
      System.out.println(equalTest(et1, et2));
  }
  public boolean equals(Object o) {
      if (o instanceof EqualsTest) {
          System.out.println("equals(Object)");
          return true;
      }
      return false;
  }
  public boolean equals(EqualsTest et) {
      System.out.println("equals(EqualsTest)");
      return this.equals((Object)et);
  }
}
Run Code Online (Sandbox Code Playgroud)

nic*_*ild 14

没有,这是隐含的.由于它没有显式extends任何类,因此它将隐式扩展Object.而且由于Object有一个no-arg构造函数,它将隐式调用那个.

实际上,该类可以包含一个以此形式编写的构造函数,它将是等效的:

public class EqualsTest {
    public EqualsTest() {
        super();
    }

    //the methods...
}
Run Code Online (Sandbox Code Playgroud)

如果扩展的类不具有'no-arg'构造函数(无论是隐式还是显式),则不能使用隐式构造函数.如果提供任何显式构造函数,则不会为您创建隐式的无参数构造函数.