Ответ 1
Приватный внешний класс будет бесполезен, так как ничто не может получить к нему доступ.
Подробнее:
Java: Почему мы можем определить класс верхнего уровня как закрытый?
Возможный дубликат:
Java: Почему мы можем определить класс верхнего уровня как закрытый?
Почему мы не можем объявить внешний класс private? Если у нас может быть внутренний частный класс, то почему у нас нет внешнего частного класса...?
Приватный внешний класс будет бесполезен, так как ничто не может получить к нему доступ.
Подробнее:
Java: Почему мы можем определить класс верхнего уровня как закрытый?
Чтобы ответить на ваш вопрос:
Если у нас может быть внутренний частный класс, то почему мы не можем иметь внешний частный класс...?
Вы можете, различие состоит в том, что внутренний класс находится на уровне доступа класса, тогда как "внешний" класс находится на уровне доступа "пакет". Из Учебники Oracle:
Если класс не имеет модификатора (по умолчанию, также называемого package-private), он виден только в пределах его собственного пакета (пакеты называются группами связанных классов - вы узнаете о них на более позднем уроке.)
Таким образом, package-private (без модификатора) - это эффект, который вы ожидаете от объявления "внешнего" класса private, синтаксис просто отличается.
private
модификатор сделает ваш класс недоступным извне, поэтому не будет никакого преимущества этого, и я думаю, что поэтому он является незаконным и разрешены только public
, abstract
и final
.
Примечание. Даже вы не можете сделать это protected
.
Вы можете.
package test;
public class Test {
public static void main(String[] args) {
B b = new B();
}
}
class B {
// Essentially private - cannot be accessed anywhere else but inside `test`
}
У вас не может быть класса private
, но вы можете иметь класс second
:
public class App14692708 {
public static void main(String[] args) {
PC pc = new PC();
System.out.println(pc);
}
}
class PC {
@Override
public String toString() {
return "I am PC instance " + super.toString();
}
}
Также помните, что внутренний класс static
неотличим от отдельного класса, за исключением того, что имя OuterClass.InnerClass
. Поэтому, если вы не хотите использовать "закрытие", используйте статический внутренний класс.
private делает класс доступным только для класса, в котором он объявлен. Если мы сделаем весь класс закрытым, никто извне не сможет получить доступ к классу и сделает его бесполезным.
Внутренний класс можно сделать приватным, потому что внешний класс может получить доступ к внутреннему классу, где это не так, если вы делаете внешний класс закрытым.