终于到了最令人惊喜的环节了!面向对象的思想理解。
还是先看看引言部分
为了能够写出可适应性强,易于更改和重用的程序,将会学习5个设计步骤,3个多态的技巧,还有八个让程序更有适应性的方法,4项对继承的建议。
椅子大战的回顾
这里用到了抽象加上继承的思想,让代码简洁,可复用
对每一个对象进行分析,抽出共同的类别、方法,如果子类中需要不一样的方法,那就把父类的方法覆盖掉(override)。
继承:继承的是实例变量和方法,用extends(扩展的意思,表明子类是扩展了父类,是更特殊的类) 父类来表示
例子:父类是医生Doctor 共同是 是否在医院工作的boolean变量workAtHospital,执行检查的操作void treatPatient{}
子类是家庭医生FamilyDoctor和外科医生Surgeon
家庭医生还要打电话boolean makePhoneCalls,提出诊断过程void giveAdvice,外科医生还得进行手术void treatPatient(),截肢操作void makeIncision()。
代码实现如下:
class Doctor
{
boolean workAtHospital;
void treatPatient()
{
}
}
class FamilyDoctor extends Doctor
{
boolean makePhoneCalls;扫描二维码关注公众号,回复: 4125475 查看本文章void giveAdvice(){}
}
class Surgeon extends Doctor
{
override void treatPatient(){}
void makeIncision(){}
}
只在乎设计的动物仿真树
面临情况:现有一部分动物,但不知何时会增加新的动物
解决办法:
步骤:
1.找共同点:辨别出所有动物都有的特征
2.设计出父类(有相同的实例变量和行为)
3.子类特殊化方法
4.再细分子类,找出小团体的共同点,抽象出第二层,比如说在类的下属中另设犬科roam相同和猫科roam也相同,还剩下一个犀牛
5.完成
实例变量:动物的名称;吃的食物;饥饿值;活动区域范围;所在位置。
行为:进食void eat();发出声音void makeNoise();睡觉void sleep();漫步void roam()。
结果:
在一个对象调用方法时,会选择最近的那一个方法进行调用
技巧:怎么判断自己设计的类是否继承关系正确:is-a,而不是have-a(应该是实例变量的关系)
继承的意义:
1.让代码更简洁,修改起来方便
2.制定一种规范、协议
多态的意义:
可以将同一个父类的子类对象整合成参数,及时新加入子类也不用重写代码
重载和重写
两个方面:
语法形式规定-重载的方法头都得一样,重写只要参数类型不一样(因为重写和继承与多态的特性没有关联)
权限规定-重载不可以降低存储权限,重写随意
关于练习题
我看的书是中译版,先前看知乎上面有人说这本书有很多翻译错误我还不太在意,不过现在终于是遇到了。
连线题目涉及到多态的答案:应该是第四行的那个答案,也就是说和c类对象本身的操作是一模一样的。
总结
本章介绍了继承的设计步骤和继承的意义,并且引出了多态的一些形式和应用,最后介绍了重载和重写的区别。