我的下面的问题是理论上的,然后是实际的。
从许多在线可用的Java资源中我发现一个类的default constructor
低于规范:
throws
条款 Java语言specification不提供default constructor
的定义,它只声明
如果类(定义)不包含构造函数声明,则为默认值 构造函数是由(由编译器)隐式声明的。
请注意,措辞implicitly declared
意味着明确定义的默认构造函数是可行的。让我们考虑下面的课程:
public class Point {
private int x;
private int y;
public int getX() { return x; }
public int getY() { return y; }
}
对于这个类,编译器将生成以下默认构造函数:
public Point() {
super();
}
我的问题是,如果我作为程序员将public Point() { }
实现一个构造函数,它可以被称为default constructor
以上的类Point吗?如果没有,那么任何明确定义的构造函数都可以被视为default constructor
吗?我很欣赏某位专家或者对这个主题绝对肯定的答案。
答案 0 :(得分:5)
如果显式定义任何构造函数,则它不能是默认构造函数,即使您编写的代码与编译器生成的默认构造函数完全等效。默认,这里,表示程序员没有采取任何行动。
更新:OP需要基于证据的答案
第13.4.12节“方法和构造函数声明”(JLS8)中的编译器规则:
证据:如果非内部类的源代码不包含声明的构造函数,则隐式声明不带参数的默认构造函数(第8.8.9节)。
证据:将一个或多个构造函数声明添加到此类的源代码将阻止此默认构造函数被隐式声明,从而有效地删除构造函数,除非其中一个新构造函数也没有参数,从而替换默认构造函数