如下代码:
public class TestOverride {
public static void main(String[] args) {
Super s = new Sub();
System.out.println(s.set());
System.out.println(s.a);
}
}class Super {
public int a = 10;
public int set(){
return a;
}
}
class Sub extends Super {
public int a = 20;
public int set(){
return a;
}
}运行后输出:
20
10
为什么不都是20?
我想不明白了。
public class TestOverride {
public static void main(String[] args) {
Super s = new Sub();
System.out.println(s.set());
System.out.println(s.a);
}
}class Super {
public int a = 10;
public int set(){
return a;
}
}
class Sub extends Super {
public int a = 20;
public int set(){
return a;
}
}运行后输出:
20
10
为什么不都是20?
我想不明白了。
上面所说的只适用于成员变量,因为java支持多态,即如果父类中存在的方法在子类中被重新实现了,也就是父类规定的一件事情子类各自有各自的做法,那么将根据对象的实际类型调用方法,本题中s是Sub类对象,故调用Sub类的set方法,子类中的方法当然是访问子类中的变量(当然,如果你用super.a,那么访问的肯定是父类中的a,呵呵)
如有纰漏,敬请指正