学习任何事物,先从其定义入手,那么我们将会更加深入的理解,首先我们来看一下什么叫名称屏蔽。
名称屏蔽:
如果说Java的基类拥有某个多次被重载的方法名称,那么如果你在导出类中重新定义该方法名称并不会屏蔽其在基类中的任何版本。也就是说,重载机制会正常工作。
package lession04;
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(1);
b.doh('x');
b.doh(1.0f);
b.doh(new Milhouse());
}
}
看完这么一堆枯燥的代码之后,我们来进行一个简单的分析:我们可以看到的是在类Bart中定义了一个新的重载方法,但是它继承了Homer类,这个类中方法还会不会奏效呢?答案是肯定的(但在c++中不可行呢)。我们可以看结果:
在这我们也要介绍一个Java SE5中引入的新的注解**@override**,在覆写某个方法时使用,防止你在不想重载时而意外的进行了重载。
请批评指正,谢谢