第七章-复用类
一、名称屏蔽
????? 如果Java的基类拥有某个已经被多次重载的方法名称,那么在导出类中重新定义该方法名称并不会屏蔽其在基类中的任何版本:
class A{public void fun(int i){System.out.println("From class A : " + i);}public void fun(boolean b){System.out.println("From class A : " + b);}}public class Test extends A {public void fun(float f){System.out.println("From class Test : " + f);}public static void main(String[] args){Test test = new Test();test.fun(1);test.fun(true);test.fun(1.1f);}}?
结果:
From class A : 1From class A : trueFrom class Test : 1.1
?
二、final关键字:
????? Java中必须在变量的定义处或者每个构造器中用表达式对final进行赋值,一个既是static又是final的变量只占用一段不能改变的存储空间。
????? Java中使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义。这时出于设计考虑:想要确保在继承中使用方法行为保持不变,并且不会被覆盖。过去建议使用final方法的第二个原因是效率。使用final可以有效的“关闭”动态绑定,这样,编译器就可以为final方法调用生成更有效的代码。然而,大多数情况下这样做对程序的整体性能不会有什么改观。在使用Java SE5/6时,应该让编译器和JVM去处理效率问题,只有在想要明确禁止覆盖时,才将方法设置成final的。