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"
}
}
为什么访问字段(数据成员)和方法有所不同?您能否就语言设计和实现细节方面向我解释一下?
感谢。
答案 0 :(得分:3)
这是因为您只能使用override
个方法,而不能使用字段。在DerivedClass
隐藏filed
中声明的变量BaseClass
。 DerivedClass
的实例实际上有两个名为filed
的字段,您可以使用适当的强制转换访问这两个字段。能够覆盖字段没有多大意义......只有行为。