java名字的埋没
只有C++措施员大概才会惊奇于名字的埋没,因为它的事情道理与在C++里是完全差异的。假如Java基本类有一个要领名被“过载”利用多次,在衍生类里对谁人要领名的从头界说就不会埋没任何基本类的版本。所以无论要领在这一级照旧在一个基本类中界说,过载城市生效:
//: 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());
}
} ///:~
正如下一章会讲到的那样,很少会用与基本类里完全一致的签名和返回范例来包围同名的要领,不然会使人感想疑惑(这正是C++不答允那样做的原因,所以可以或许防备发生一些不须要的错误)。