class BaseClass {
protected int filed = 1;
public void method() {
System.out.println("+ BaseClass method");
}
}
class DerivedClass extends BaseClass {
private int filed = 2;
public void method() {
System.out.println("+ DerivedClass method");
}
public void accessFiled() {
System.out.println("DerivedClass: default filed = " + filed); // output 1
System.out.println("DerivedClass: upcasting filed = " + ((BaseClass)this).filed); // output 2
}
public void accessMethod() {
System.out.println("DerivedClass: default method");
method(); // output "+ DerivedClass method"
System.out.println("DerivedClass: upcasting method");
((BaseClass)this).method(); // expecting "+ BaseClass method" but "+ DerivedClass method"
}
}为什么对文件(数据成员)和方法的访问不同?你能从语言设计和实现细节两个方面给我解释一下吗?
谢谢。
发布于 2009-12-23 01:13:24
这是因为您只能使用override方法,而不能使用字段。在DerivedClass中,您隐藏了在BaseClass中声明的变量filed。DerivedClass的一个实例实际上有两个名为filed的字段,您可以通过适当的强制转换来访问这两个字段。能够重写字段没有多大意义...只有行为。
https://stackoverflow.com/questions/1947730
复制相似问题