Мы все знаем, что если мы специально не определяем конструктор, компилятор вставляет невидимый конструктор нулевого параметра. Я думал, что его модификатор доступа был общедоступным, но, столкнувшись с проблемой внутреннего класса, я обнаружил, что я ошибся. Вот мой код:
public class Outer {
protected class ProtectedInner {
// adding a public constructor will solve the error in SubOuterInAnotherPackage class
//public ProtectedInner() {}
}
}
И в другом пакете есть подкласс Outer
:
public class SubOuterInAnotherPackage extends Outer {
public static void main(String[] args) {
SubOuterInAnotherPackage.ProtectedInner protectedInner
= new SubOuterInAnotherPackage().new ProtectedInner(); // Error!! Can't access the default constructor
}
}
Вы получите сообщение об ошибке в методе main()
, но если вы добавите публичный конструктор в класс ProtectedInner
, эта ошибка будет решена. Поэтому я думаю, что модификатор конструктора по умолчанию не является общедоступным! Так может ли кто-нибудь сказать мне, что такое модификатор доступа конструктора по умолчанию?