2
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"
}
}
爲什麼對字段(數據成員)和方法的訪問不同?您可以在語言設計和實現細節方面向我解釋嗎?爲什麼訪問字段和方法在Java中的繼承類中有所不同?
謝謝。
Duplicate http://stackoverflow.com/questions/404804/java-covariants/404817 – starblue 2009-12-22 17:06:55
主要是爲了支持多態性。 – Jichao 2009-12-24 04:01:35