只有C++程序員可能才會驚訝于名字的隱藏,因為它的工作原理與在C++里是完全不同的。如果Java 基礎(chǔ)類
有一個方法名被“過載”使用多次,在衍生類里對那個方法名的重新定義就不會隱藏任何基礎(chǔ)類的版本。所
以無論方法在這一級還是在一個基礎(chǔ)類中定義,過載都會生效:
//: Hide.java
// Overloading a base-class method name
// in a derived class does not hide the
// base-class versions
class Homer {
char doh(char c) {
System.out.println("doh(char)");
return 'd';
}
float doh(float f) {
System.out.println("doh(float)");
return 1.0f;
}
}
class Milhouse {}
class Bart extends Homer {
void doh(Milhouse m) {}
}
class Hide {
public static void main(String[] args) {
Bart b = new Bart();
b.doh(1); // doh(float) used
b.doh('x');
b.doh(1.0f);
b.doh(new Milhouse());
}
} ///:~
正如下一章會講到的那樣,很少會用與基礎(chǔ)類里完全一致的簽名和返回類型來覆蓋同名的方法,否則會使人
感到迷惑(這正是C++不允許那樣做的原因,所以能夠防止產(chǎn)生一些不必要的錯誤)。 本文出自:億恩科技【1tcdy.com】
服務(wù)器租用/服務(wù)器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|