Теперь у вас есть идея о полиморфизме и переопределении.
Поскольку вы не получить ожидаемый результат, я хотел бы предложить способ получить ожидаемый результат через метод затенение или скрываются
Если вы повторно определить базовый класс нестатического &, не частный метод в производный класс, он называется переопределением.
В этом примере выполняется экземпляр B и, следовательно, f()
был вызван из B вместо А.
Если вы повторно определить базовый класс статический метод/переменная производного класса, это называется скрывается или затенение.
В приведенном выше примере просто добавьте static
, модифицированный для метода g()
, и вы получите требуемый выход. Теперь g()
метод
class A {
public static int i=10;
public static void f() {
System.out.println("f() in A:i="+i);
}
public void g() { System.out.println("g() in A"); f(); }
}
class B extends A {
public static int i=20;
public static void f() {
System.out.println("f() in B:i"+i);
}
}
public class Test2 {
public static void main(String args[]){
B b = new B();
A a = b;
a.g();
}
}
выход:
g() in A
f() in A:i=10
Читайте о полиморфизма и переопределения метода. – Eran