【发布时间】:2013-05-21 23:24:53
【问题描述】:
在这样的情况下:
class A{
public int x = 4;
public void s3(){
x = 3;
}
public void f(){
x = 8;
s3();
}
}
class B extends A{
public int x = 5;
public void f(){
x = 10;
s3();
}
}
A a = new B();
B b = (B) a;
a.f();
System.out.println(b.x);
System.out.println(a.x);
a.f() 调用类B 的f(),然后f() 在赋值后调用s3() 函数。此时,s3() 仅在A 中定义,当它为x 赋值3 时,x 是类A 拥有的变量的副本。为什么s3() 不使用B 中声明的x?从理论上讲,B 不应该有自己的 s3() 函数的副本继承自 A 吗? (所以从B 中的A 继承的s3() 应该使用在B 中声明的x)
【问题讨论】:
-
为了将来参考,使用单个字符作为所有变量、方法和类名的名称会使您的代码难以遵循。
-
"为什么
s3()不使用B中声明的x?"对于B应该覆盖s3(),这与继承不同。
标签: java oop inheritance polymorphism