只有C++程序員可能才會(huì)驚訝于名字的隱藏,因?yàn)樗墓ぷ髟砼c在C++里是完全不同的。如果Java 基礎(chǔ)類
有一個(gè)方法名被“過載”使用多次,在衍生類里對(duì)那個(gè)方法名的重新定義就不會(huì)隱藏任何基礎(chǔ)類的版本。所
以無論方法在這一級(jí)還是在一個(gè)基礎(chǔ)類中定義,過載都會(huì)生效:
//: 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());
}
} ///:~
正如下一章會(huì)講到的那樣,很少會(huì)用與基礎(chǔ)類里完全一致的簽名和返回類型來覆蓋同名的方法,否則會(huì)使人
感到迷惑(這正是C++不允許那樣做的原因,所以能夠防止產(chǎn)生一些不必要的錯(cuò)誤)。 本文出自:億恩科技【www.artduck.net】
服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|