在JAVA中,若基类拥有某个被多次重载的方法名称,那么在导出类中重新定义该方法名称时并不会屏蔽在基类中的任何版本,这与C++不同。因此,无论在该层或者其它基类中对方法进行定义,重载机制仍可以正常运行,看如下代码段:
package access;
import java.util.*;
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){
System.out.println("doh(Milhouse)");
}
}
public class Hide {
public static void main(String[] args) {
// TODO Auto-generated method stub
Bart b = new Bart();
b.doh(5);
b.doh('x');
b.doh(1.909331315468f);
b.doh(new Milhouse());
}
}
此程序运行结果为:
从运行结果可以看到,虽然Bart引入了一个新的重载方法,但在Bart中Homer的所有重载方法均可以使用。
若我们想要覆写某个方法时,可以使用”@Override”注解,虽然不是关键字,但可以把它当做关键字来使用,此注解可以帮助我们避免重载错误的发生,当不留心重载而并非覆写了某个方法时,编译器会生成一条错误信息。
@Override注解可以防止我们在不想重载时意外的进行了重载。