Рассмотрим следующий фрагмент.
package breakoop;
public class BreakOOP {
public static class A{
private int a;
}
public static class B extends A{
public int f(){
return super.a;
}
}
public static void main(String[] args) {
B b = new B();
System.out.println(b.f());
}
}
Пример компилируется, только если A
и B
инкапсулированы в класс BreakOOP
.
Кажется, это противоречит некоторым фундаментальным концепциям ООП. Может кто-нибудь объяснить, почему это компилируется? Какова причина этого?
super.a
, я думаю. Это компилируется, потому что в спецификации указано, что любой закрытый член виден внутри области класса верхнего уровня, то есть в вашем случае в пределахBreakOOP
(мне нужно будет найти соответствующий раздел JLS). - person Thomas   schedule 27.09.2016