Мой друг задал мне этот вопрос. Почему следующий код не дает ошибки при вызове aa.x()?
Я понимаю, что aa является ссылкой на объект класса B, но вызывает частный метод класса A внутри метода класса A, где он виден и, следовательно, доступен.
Правильно ли я понимаю? Или есть другая причина?Понимание объема частного метода
public class A {
public void xyz() {
System.out.println("A");
}
private void x() {
System.out.println("A:x");
}
public static void main(String[] args) {
B b = new B();
A aa = b;
aa.x();
aa.xyz();
B bb = (B) aa;
bb.xyz();
bb.xyz12();
}
}
class B extends A {
public void xyz() {
System.out.println("B");
}
public void xyz12() {
System.out.println("B-12");
}
}
Так много дубликатов, поэтому мало времени ... * Редактировать: * Er, ну, может быть, не с подклассом морщин. –
Если вы хотите, чтобы это понять, прочитайте здесь о модификаторах доступа https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html. частный модификатор доступа для класса и основного в этом классе, поэтому нет проблемы с вызовом этого метода. – Gaskoin
Здесь также можно написать 'A aa = new A()' вместо 'A aa = b'. Поскольку 'A aa = b' является законным, а' aa.x() 'является законным внутри' A # main() ', все в порядке. –