标签:
7.一个方法为什么要声明称final呢? final方法能防止别人覆盖,但更重要的一点,它可以"关闭"动态绑定(发生动态绑定的条件:继承,方法覆盖,父类引用指向子类),告诉编译器不需要进行动态绑定,这样编译器就可以为final方法调用更高效的代码
过载:是指同一样东西在不同的地方具有不同的含义; 覆盖:随时随地都只有一种含义,只不过原来的含义被后来的含义取代了;(假设:public class A; void overWrite(int A) ; void overWrite(A a) 第一个A是指一个int类型的变量,第二个A是一个类型;)
假如过度的使用继承,也会使自己的设计变得不必要的复杂起来.事实上,当我们以一个现有的类为基础建立一个新的类的时候,如果首先选择继承,会使情况变得复杂起来.更好的选择是"合成".
常规的设计准则:用继承表达行为间的差异,并用成员变量表达状态的变化.
interface Actor {
void act();
}
class HappyActor() implements Actor {
public void act() {
System.out.println("HappyActor");
}
}
class SadActor implement Actor() {
public void act() {
System.out.println("SadActor");
}
}
class Stage() {
Actor a = new HappyActor();
void change() {
a = new SadActor();
}
void go() {
a.act();
}
}
public class Transmogrify() {
public static void main(String[] args) {
Stage s = new Stage();
s.go();//print "HappyActor"
s.change();
s.go();//print "SadActor"
}
}
Stage通过合成技术允许他自己的状态发生变化,那种状态的改变(s变量的改变)同时也产生了行为的变化.
标签:
原文地址:http://www.cnblogs.com/-xuzhankun/p/5514854.html