Почему у нас не может быть конструктора с именем, отличным от имен классов, если они уникальны? - PullRequest
0 голосов
/ 22 мая 2019

Я понимаю, что Java накладывает ограничение на то, что имя класса должно совпадать с именем конструктора. Почему это ограничение введено? Почему у меня не может быть конструктора класса с именем, отличным от имени класса, если для любого другого класса не существует конструктора с таким же именем?

Ответы [ 4 ]

0 голосов
/ 22 мая 2019

Это соглашение для простоты программирования, цепочки конструктора и согласованности в языке.

Например, рассмотрим сценарий, в котором вы хотите использовать класс Scanner, теперь что если разработчики JAVA назвали конструктор xyz!

Тогда как вы узнаете, что вам нужно написать:

Сканер scObj = новый xyz (System.in);

что могло бы быть очень странно, верно! Или, скорее, вам, возможно, придется обратиться к огромному руководству, чтобы проверить имя конструктора каждого класса, чтобы создать объект, что опять же не имеет смысла, если бы вы могли решить проблему, просто назвав конструкторы, такие же, как у класса.

Во-вторых, конструктор сам создается компилятором, если вы явно не предоставите его, то компилятор может автоматически выбрать то, что может быть лучшим именем для конструктора, чтобы это было понятно программисту! Очевидно, что лучший выбор - оставить его таким же, как у класса.

В-третьих, вы, возможно, слышали о цепочке конструкторов, а затем при цепочке вызовов между конструкторами, как компилятор узнает, какое имя вы дали конструктору цепочечного класса! Очевидно, что решение проблемы опять то же самое, сохраняйте имя строителя так же, как класс.

Спасибо за вопрос.

0 голосов
/ 22 мая 2019

Я предполагаю, что соглашение о том, чтобы иметь одно и то же имя для класса и его конструкторов, считалось полезным.В качестве альтернативы язык должен был бы быть расширен с помощью ключевого слова (constructor?), Разрешены конфликты имен методов и т. Д. *

Можете ли вы поделиться примером использования, который выигрывает от произвольного именованного метода construcor?

0 голосов
/ 22 мая 2019

Давайте предположим, что у нас может быть другое имя, а не имя класса. Вы должны проверить, использовалось ли оно уже для какого-либо другого класса или нет. Для уточнения рассмотрим следующий пример:

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. 

Теперь подумайте о реальных соглашениях об именах конструктора, которые, если вы используете то же самое, что и для имени класса, это проще и также имеет смысл.

Person p1 = new Person();
MotorCycle m1 = new MotorCycle();
0 голосов
/ 22 мая 2019

Это потому, что Java не может "видеть" другие классы, она заботится только об одном классе при компиляции.

Кроме того, если конструктор имеет имя, отличное от имени класса, он не может быть найдени это не имеет никакого смысла в любом случае.Представьте себе, что вы делаете это:

Person person = new Robot();

, где Robot будет конструктором в Person.Это просто не имеет никакого смысла для людей или компилятора!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...