Вопрос по java, constructor – Java-конструктор, имеющий более широкий уровень доступа, чем его класс

3

Спецификация Java позволяет классу с доступом по умолчанию иметь свой конструктор общедоступный доступ, какова его цель, поскольку на него нельзя ссылаться вне его пакета?

Я вижу этот вопрос больше похожим на то, почему конструктор может иметь более широкий доступ, чем класс. Я не вижу, как какой-либо из ответов объясняет это. Pablo

Ваш Ответ

3   ответа
0

Видимость класса определяет, как внешний мир создает экземпляры класса. следовательно, частные классы пакета могут быть созданы только в пакете, который они объявили. Видимость метода (включая конструкторы) определяет, как экземпляр, уже созданный, может использоваться вне определения класса.

Если вы объявите закрытый класс пакета с частным / защищенным создателем, как вы будете создавать его экземпляр из другого класса в том же пакете?

Две вещи: Класс видимости - определяет, как экземпляры создаются вне их определяющих пакетов. Видимость метода (включая конструкторы) - определяет, как контролируется доступ к элементам, независимо от видимости пакета.

2

Если вы спрашиваете, почему вы можете иметьpublic конструкторы: это потому, что вы можете, например, вызывать их явно (или неявно), когда выextend базовый класс.

Да, но нет цели иметь открытый конструктор, если класс не может быть расширен из другого пакета. Dilini Rajapaksha
Спасибо за ответ, я не мог понять это, пока @ user439407 не проиллюстрировал ситуацию. Dilini Rajapaksha
4

Я хотел сделать это комментарием, но так как никакие кодовые теги не разрешены в комментариях ....

Что касается вашего комментария на CristopheDs ответ:

package bob;

class MySuperHiddenClass {

  public MySuperHiddenClass() {
        System.out.println("bob");
  }
}

А также

package bob;
public class MyPublicClass extends MySuperHiddenClass {

}

В MyPublicClass не было объявлено ни одного конструктора, но вы все равно можете вызывать новый MyPublicClass из любого пакета.

Вы на 100% правы, я заберу свой ответ.
Вы можете вызвать новый MyPublicClass из любого пакета, даже если конструктор MySuperHiddenClass не был публичным. Я не вижу, как это отвечает на вопрос.

Похожие вопросы