为什么类名和构造函数名称必须相同

Edw*_*nes -2 c# c++ java constructor class

所以我最近开始学习面向对象理论的基础知识,并且已经通过java实践了这一点.我的问题很简单,"为什么班级名称和建设者名称应该相同"?

现在我已经阅读了这个问题 - >

为什么构造函数将始终具有与类相同的名称以及如何调用它们

即使这种反应有意义,降低关键字的使用,在我看来能够更有意义地能够以不同的方式命名构造函数并独立于类.现在,如果我没记错的话(稍微通过快速Google验证),语法如下:

 className objectName = New constructorName(variables)
Run Code Online (Sandbox Code Playgroud)

所以我的观点是你已经将你想要创建对象的类命名为,为构造函数再次调用相同的名称有什么意义?你不妨写一下

 className objectName = New (vars); 
Run Code Online (Sandbox Code Playgroud)

看到两者提供完全相同的信息.

在我看来,能够独立命名你的构造函数以更好地了解它究竟是做什么会更加语义,例如

  thisClass thisObject = New thisConstructorMakesThis(vars)
Run Code Online (Sandbox Code Playgroud)

除了上面链接中给出的响应之外,是否有一些文档可以解释为什么构造函数和类被命名为相同?

另外我注意到响应甚至没有明确提到动态命名构造函数的考虑,而是一个"显式语法",它听起来更像是一个绝对的构造函数名称.

Joh*_*ica 6

当你写new Identifier,Identifier不是构造函数的名称,它是类的名称.它通常与变量的类相同,但并非总是如此.变量的静态类型不需要与实例化的类匹配.例如:

Collection<Integer> numbers = new ArrayList<Integer>();
Run Code Online (Sandbox Code Playgroud)

如果你没有写类名,那就写了:

className objectName = new(vars);
Run Code Online (Sandbox Code Playgroud)

在变量初始化的上下文之外会发生什么?如果您有内联new呼叫怎么办,例如:

linkedList.next = new Node(value, null);
Run Code Online (Sandbox Code Playgroud)

Node不是多余的; 这是班上唯一提到的.如果你要省略Node,编译器将如何知道要实例化的类?