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

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

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

Ответы на вопрос(3)

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

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

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

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

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

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

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

package bob;

class MySuperHiddenClass {

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

А также

package bob;
public class MyPublicClass extends MySuperHiddenClass {

}

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

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

Ваш ответ на вопрос