Я играл с классами, так как я изучаю синтаксис Java, и я наткнулся на эту странную ситуацию. Поэтому, учитывая класс A
и B
:Наследование и статический тип java
public class A {
public int x() {
return x;
}
}
public class B extends A {
int x = 5;
public int x() {
return x + 2;
}
public static void main(String[] args) {
B b = new B();
System.out.println(b.x());
}
Выполнение основного метода я получаю ошибку во время компиляции, что он не находит переменную x
и это призывающий метод из A
, поскольку ошибка показывает return x
вместо return x + 2
. Так как статический тип b
- B
, почему он ищет в A
для x
?
error: cannot find symbol
return x;
symbol: variable x
location: class A
класса 'A' есть это не распространяется переменная' x', что вы пытаетесь вернуться в функции 'A # x'. – SomeJavaGuy
У вас нет объявлений 'int x' в вашем классе A. – drgPP
' return x; '==>' x' определен в 'B',' A' не имеет возможности это знать – TheLostMind