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);
}
}
答案 0 :(得分:14)
没有,这是隐含的。由于它没有明确extends
任何类,它将隐式扩展Object
。而且由于Object有一个no-arg构造函数,它将隐式调用那个。
实际上,该类可以包含一个这样编写的构造函数,它将是等价的:
public class EqualsTest {
public EqualsTest() {
super();
}
//the methods...
}
如果你扩展的类不具有“无法”,则不能使用隐式构造函数。构造函数(无论是隐式的还是显式的)。如果您提供任何显式构造函数,则不会为您创建隐式no-arg构造函数。
答案 1 :(得分:2)
类中没有定义构造函数,因此Java将在编译时添加Default Constructor。 查看http://en.wikipedia.org/wiki/Default_constructor#Java_and_C.23
答案 2 :(得分:2)
您的班级中没有明确的构造函数。您正在使用implicit
类中的Object
构造函数,如下所示:
EqualsTest et1 = new EqualsTest();
为了您的理解,构造函数通常定义如下:
public EqualsTest(){ //without param
}
public EqualsTest(int param1){ //with one param
}
请注意:构造函数和其他方法的主要区别是:构造函数与您的类具有相同的名称,并且没有任何返回类型。
答案 3 :(得分:2)
所有没有显式声明构造函数的java类都会获得格式
的默认no-arg构造函数public ClassName()
{
super();
}
隐式构造函数内部是对类的超类(默认为Object)的构造函数的调用,因此'super();'
答案 4 :(得分:2)
如果您未指定任何构造函数,则提供一个构造函数。如果您提供一个,则必须覆盖默认情况下的那个。所以在这里你提供了构造函数。
答案 5 :(得分:2)
如果一个类没有任何构造函数,它会创建一个隐式构造函数,在你的情况下
public EqualsTest(){}
会在那里。如果你创建一个带有任何参数的构造函数,你将失去这个隐式构造函数,如果你想要一个无参数构造函数,你将不得不构造它。
答案 6 :(得分:2)
main
方法是应用程序的入口点。它在你启动时被调用,这里没有实例化。如果需要,可以创建构造函数:
public class Main {
/**
* Main.
* @param args
*/
public static void main(String[] args) {
Main main = new Main();
// do something more
}
public Main() {
// do something
}
}
您甚至可以在我的代码中看到Main
实例化。在这种情况下,您可以为Main
创建构造函数,否则将调用Object
的默认构造函数。
你甚至可以这样做对你有意义:
public class Main {
/**
* Main.
* @param args
*/
public static void main(String[] args) {
Main main = new Main("some param");
}
public Main() {
// do something
}
public Main(String someParameter) {
this();
}
}
但请注意,如果没有您的干预,您的Main
课程将无法获得实例化。
答案 7 :(得分:2)
如果未指定,则构造函数是隐式的。
这意味着您可以通过调用new EqualsTest()
来实例化该类。
当您使用参数定义构造函数时,您将丢失此功能,并且如果需要,您还必须编写默认的no-arg构造函数的代码。
答案 8 :(得分:2)
如果没有指定构造函数,则有一个隐式构造函数。在你的情况下
public EqualsTest(){
super();
}
如果你声明一个构造函数,那么这个隐式构造函数不再存在,你必须显式地声明一个no args构造函数
答案 9 :(得分:2)
Java提供了一个默认构造函数,它不带任何参数,并且在没有提供显式构造函数时不执行特殊操作或初始化。
隐式默认构造函数采取的唯一操作是使用super()调用来调用超类构造函数。
答案 10 :(得分:2)
在您的情况下,隐式构造函数正在调用对象类构造函数
隐式构造 看起来像
public EqualsTest()
{
super();
}