Здесь интересный фрагмент кода:
public class Superclass {
public static void main (String[] args){
Superclass obj = new Subclass();
obj.doSomething(); #prints "from Superclass"
}
private void doSomething(){System.out.println("from Superclass");}
}
class Subclass extends Superclass {
private void doSomething(){System.out.println("from Subclass");}
}
Я знаю, что подклассы не наследуют частных членов своего родителя, но здесь obj удается вызвать метод, к которому у него не будет доступа. Во время компиляции obj имеет тип Superclass, во время выполнения типа Subclass.
Вероятно, это связано с тем, что вызов doSomething() происходит внутри класса драйвера, который, по-видимому, является его собственным классом (и почему он может вызвать doSomething() в первую очередь).
Итак, вопрос сводится к тому, как obj имеет доступ к частному члену своего родителя?