public class Circle {
public float r = 100;
public float getR() {
return r;
}
}
public class GraphicCircle extends Circle {
public float r = 10;
public float getR() {
return r;
}
// Main method
public static void main(String[] args) {
GraphicCircle gc = new GraphicCircle();
Circle c = gc;
System.out.println("Radius = " + gc.r);
System.out.println("Radius = " + gc.getR());
System.out.println("Radius = " + c.r);
System.out.println("Radius = " + c.getR());
}
}
Привет, У меня возникли проблемы с пониманием вывода вышеприведенного кода. Выход:
Java-метод переопределения и переменной тенирования
Radius = 10.0
Radius = 10.0
Radius = 100.0
Radius = 10.0
Я понимаю, почему gc.r 10. Я также понять, почему gc.getR() 10 (так как метод GETR() в GraphicCircle переопределяет метод GETR() из Circle). Но я не понимаю, почему c.r - 100, а c.getR() - 10 (у меня возникают проблемы с пониманием того, что происходит в наследовании, когда вы приписываете класс предков, как это сделал код выше).
Вот что вы хотите знать - http://stackoverflow.com/questions/9453701/what-is-virtual-method-calling-in-java – Betlista
Возможный дубликат [Почему переменные не ведут себя так же, как метод while Overriding.?](http://stackoverflow.com/questions/17201227/why-variables-are-not-behaving-as-same-as-method-while-overriding) – Mikaveli