我很努力去理解变量被覆盖的方法覆盖用Java继承的概念。Java变量被覆盖的方法被覆盖的概念
情况1:
class Car{
public int gearRatio = 8;
public String accelerate() { return "Accelerate : Car"; }
}
class SportsCar extends Car{
public int gearRatio = 9;
public String accelerate() { return "Accelerate : SportsCar"; }
public static void main(String[] args){
Car c = new SportsCar();
System.out.println(c.gearRatio+" "+c.accelerate());
}
}
输出:8加速:跑车。
案例2:
public class TestClass{
public static void main(String args[ ]){
A o1 = new C();
B o2 = (B) o1;
System.out.println(o1.m1());
System.out.println(o2.i);
}
}
class A { int i = 10; int m1() { return i; } }
class B extends A { int i = 20; int m1() { return i; } }
class C extends B { int i = 30; int m1() { return i; } }
输出:30,20
所以,如果我理解正确的话,超类变量总是被调用,除非子类变量被显式调用。但是对于调用子类重写方法的方法,情况正好相反,除非显式调用超类。
我会认为变量和方法应该是相同的,否则在创建具有相同变量的子类时应该有编译错误。
有人可以解释,如果这是正确的,为什么java这样工作请。
+1”注意,如果你的变量是私人的,因为他们几乎总是应该的,情况永远不可见“ – kosa
因此,为什么变量不是多态处理的概念并不重要,因为它们应该始终通过处理多态的方法? – Quinma