Когда дочерний класс расширяет родительский класс, а родительский класс имеет метод, который ссылается на переменную экземпляра, объявленную в родительском классе. Но дочерний класс не переопределил этот метод и объявил переменную экземпляра с тем же именем, что и родительский. В этом случае будет указана переменная экземпляра из дочернего или родительского элемента.
Ниже приведен фрагмент кода:
Код: Выделить всё
class Parent {
int a;
Parent() {
System.out.println("in Parent");
a = 10;
}
void method() {
System.out.println(a);
}
}
class Child extends Parent {
int a;
Child() {
System.out.println("in Child");
a = 11;
}
}
public class Test {
public static void main(String args[]) throws IOException {
Parent p1 = new Child();
p1.method();
}
}
в родительском
в дочернем
10
Я хочу понять, почему он ссылается на переменную экземпляра a родительского класса, а не на a дочернего класса.
Еще одно сомнение: я понял, что метод скрывается, когда в родительском и дочернем классе есть статический метод, а также объявлен статический метод с той же сигнатурой. Что здесь означает скрываться? Какой метод скрывается? Если это родительский метод, то почему?
Подробнее здесь: https://stackoverflow.com/questions/149 ... e-variable
Мобильная версия