Когда вы создаете экземпляр класса Child, он содержит всех членов себя и Parent. Тем не менее, частные члены Parent не доступны из Child:
class Parent {
private int p = 10;
}
public class Child extends Parent{
void m1(){
System.out.println(p); // compilation error
}
}
Еще один интересный случай - когда один экземпляр Parent пытается получить доступ к закрытому полю другого экземпляра Parent. Как вы думаете, что происходит?
public class Parent {
private int p = 11;
public boolean same(Parent other) {
return other.p == p;
}
}
Вы можете подумать, что other.p
приведет к ошибке компиляции, поскольку p
является приватным полем. Однако, поскольку конфиденциальность относится не к экземплярам объектов, а к классам. Таким образом, все закрытые поля в Parent видны во всех экземплярах Parent, поэтому это работает!