【大话设计模式】附录A 笔记

来源:互联网 发布:建设银行mac版网银盾 编辑:程序博客网 时间:2024/05/02 05:07

***********************************************

继承


关于继承的三句话:

1. 子类拥有父类非 private 的属性和功能;简单说,公用的东西能继承,老爸自己的东西你不能继承,你爸的老婆一定不是继承成你老婆。

2. 子类具有自己的属性和功能,即子类可以扩展父类没有的属性和功能;你自己可以添家当。

3. 子类还可以以自己的方式实现父类的功能(方法重写)。就是多态啦。


继承的缺点:

1. 父类变,则子类不得不变。

2. 继承会破坏包装,父类实现细节暴露给子类,这样就增大了两个类之间的耦合性。(继承显然是一种类与类之间强耦合的关系)

以上两点就是说,要是你爸是个淘气的老少年,一天一个花样,你天天跟着变也是闹腾。


用继承的条件:

当两个类之间具备‘is-a’ 的关系时,就可以考虑用继承了。而当两个类之间是 ‘has-a’ 的关系时,不适合用继承。比如:人有两只手,手不能继承人;飞机场有飞机,飞机不能继承飞机场。

***********************************************

多态


多态表示不同的对象可以执行相同的动作,但要通过他们自己的实现代码来执行。


几点说明:

1. 子类以父类的身份出现,就是说这个函数算是父类的,实在父类里面声明的。可以想成,这个菜在祖传菜单里。

2. 子类在工作时以自己的方式来实现。就是说,这个函数是父亲提出来的,但是具体活怎么干是儿子自己琢磨着干的,这个菜的名字在菜单里,但是菜怎么烧看儿子的。

3. 子类以父类的身份出现时,子类特有的属性和方法不可以使用。烧菜的材料是老爸厨房里的,老爸厨房里只有花生油,儿子厨房里有橄榄油,那儿子烧这个菜就不能用自己的橄榄油,只能用老爸的花生油,不然穿帮了。


怎么认出来

怎么知道哪个函数是可以多态的呢,老爸列菜单的时候前面写了个‘virtual’. 只有这样的菜,儿子才能自己 override。


多态的原理

当方法被调用时,无论对象是否被转换为其父类,都只有位于对象继承链最末端的方法实现会被调用。也就是说,虚方法是按照其运行时类型而非编译时类型进行动态绑定调用的。

***********************************************

重构



0 0
原创粉丝点击