我知道Java施加了一个限制,即类名应与构造函数名相同。为什么要施加此限制?为什么只要其他任何类都不存在具有相同名称的构造函数,为什么我的类的构造函数名称不能与类名称不同?
答案 0 :(得分:0)
这是因为Java无法“看到”其他类,它只在编译一个类时关心它。
此外,如果构造函数的名称不是类名,则无法找到它,并且也毫无意义。想象一下这样做:
Person person = new Robot();
其中Robot
将是Person
中的构造函数。只是对人类或编译器没有任何意义!
答案 1 :(得分:0)
我想对于类和它的构造体使用相同名称的约定被认为是有用的。或者,必须用关键字(constructor
来扩展语言,解决方法名冲突等...
您能分享一个使用任意命名construcor方法的用例吗?
答案 2 :(得分:0)
让我们假设我们可以使用另一个名称而不是类名,您必须检查它是否已经用于其他任何类。要详细说明,请考虑以下示例,
Person p1 = new Vehicle();
现在,在另一个班上
MotorCycle m1 = new Vehicle(); // if you have used the same name then it will create a conflict for the compiler which implementation should be considered.
现在,请考虑一下实际的构造函数命名约定,如果您对Class name使用相同的命名约定,那么这样做会更容易,也很有意义。
Person p1 = new Person();
MotorCycle m1 = new MotorCycle();
答案 3 :(得分:0)
此约定是为了简化编程,简化构造函数链接和语言的一致性。
例如,考虑一种情况,您要使用Scanner类, 现在如果JAVA开发人员将构造函数命名为xyz!
然后您将如何知道需要写:
Scanner scObj = new xyz(System.in);
这本来是很奇怪的,对! 或者,更确切地说,您可能必须参考大量手册来检查每个类的构造函数名称以创建对象,如果仅通过命名与该类相同的构造函数就可以解决问题,那么这又毫无意义。 / p>
第二,如果您未明确提供构造函数,则构造函数本身是由编译器创建的,那么编译器会自动选择最适合构造函数的名称,因此程序员很清楚!显然,最好的选择是与班级保持一致。
第三,您可能听说过构造函数链接,然后在构造函数之间链接调用时,编译器将如何知道您给链接类的构造函数指定了什么名称! 显然,解决该问题的方法还是相同的,将构造函数的名称保留为该类的名称。
谢谢。