为什么我们不能拥有名称不同于类名的构造函数,只要它们是唯一的

时间:2019-05-22 15:57:08

标签: java oop object constructor

我知道Java施加了一个限制,即类名应与构造函数名相同。为什么要施加此限制?为什么只要其他任何类都不存在具有相同名称的构造函数,为什么我的类的构造函数名称不能与类名称不同?

4 个答案:

答案 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>

第二,如果您未明确提供构造函数,则构造函数本身是由编译器创建的,那么编译器会自动选择最适合构造函数的名称,因此程序员很清楚!显然,最好的选择是与班级保持一致。

第三,您可能听说过构造函数链接,然后在构造函数之间链接调用时,编译器将如何知道您给链接类的构造函数指定了什么名称! 显然,解决该问题的方法还是相同的,将构造函数的名称保留为该类的名称。

谢谢。