Вопрос по java, constructor – Java-конструктор, имеющий более широкий уровень доступа, чем его класс
Спецификация Java позволяет классу с доступом по умолчанию иметь свой конструктор общедоступный доступ, какова его цель, поскольку на него нельзя ссылаться вне его пакета?
Видимость класса определяет, как внешний мир создает экземпляры класса. следовательно, частные классы пакета могут быть созданы только в пакете, который они объявили. Видимость метода (включая конструкторы) определяет, как экземпляр, уже созданный, может использоваться вне определения класса.
Если вы объявите закрытый класс пакета с частным / защищенным создателем, как вы будете создавать его экземпляр из другого класса в том же пакете?
Две вещи: Класс видимости - определяет, как экземпляры создаются вне их определяющих пакетов. Видимость метода (включая конструкторы) - определяет, как контролируется доступ к элементам, независимо от видимости пакета.
Если вы спрашиваете, почему вы можете иметьpublic
конструкторы: это потому, что вы можете, например, вызывать их явно (или неявно), когда выextend базовый класс.
Я хотел сделать это комментарием, но так как никакие кодовые теги не разрешены в комментариях ....
Что касается вашего комментария на CristopheDs ответ:
package bob;
class MySuperHiddenClass {
public MySuperHiddenClass() {
System.out.println("bob");
}
}
А также
package bob;
public class MyPublicClass extends MySuperHiddenClass {
}
В MyPublicClass не было объявлено ни одного конструктора, но вы все равно можете вызывать новый MyPublicClass из любого пакета.