一、java对象导论之继承

继承

对象的概念简单讲就是某个将数据和功能封装到一块的实例。

在没有继承之前,当创建了某一个类之后,即使另一个类与该类具有相似的特性和功能,但是还是得重新创建一个新类。这样即没有层次感,事物和事物之间也没有联系。通过继承,就可以根据已经存在的类(称为基类,超类,父类),再加上新类新的特性和功能,就可以创建出新的类型(子类、继承类)。这里有一点要注意的是,当修改基类时,子类可能会受到影响。通过继承即简化了代码又产生了联系。

举例:

  • 垃圾回收机。把垃圾作为一个基类,每个垃圾都有重量,可以被切碎、溶解。在此基础上添加上新的特性,比如特性瓶子的颜色,或行为铁的垃圾可以被磁化、铝的压碎,既可以形成更具体的垃圾的类型(子类)。

  • 几何形。把几何形作为一个基类,几何形都具有尺寸特性,每个几何形都可以绘制、擦除的行为。如果加上新行为,计算面积的行为,按圆形、正方形、三角形等几何形的不同的计算面积的行为,可以更具体划分为,圆形、正方形、三角形等子类。

当继承现有类型时,也就是创建了一个新类。这个新类不仅包括现有类的成员(尽管peivate成员被隐藏),而且更重要是也复制了基类的接口。也就是说所有可以发送给基类对象的消息同时也可以发送给子类对象。由于通过发送给类的消息的类型可知类的类型,所以这也就意味着子类和基类具有相同的类型。如果只是简单继承一个类而不做其他任何事情的话,那基类中的方法将会直接继承到子类中。这意味着子类的对象不仅与基类用于相同的类型,而且还拥有相同的行为,那这样做就没有什么特别意义。

让基类和子类产生差异:

  • 添加新方法,做自己独特的行为。(要注意考虑基类是否值得你直接添加此新方法呢)

  • 重写基类的方法,或者叫覆盖基类的方法。简单说就是,虽然表面是相同的接口,但是我要做不同的事情。

java中的“是一个”与“像是一个”关系

  • 如果继承只覆盖基类分方法,而没有增加新方法的话,因为基类和子类具有相同的接口,就意味着两个是相同的类型。结果可以用一个子类对象完全替换基类对象。这可以被视为纯粹替换,也称为替换原则,是继承的理想方式,也就是“is-a”(是一个)的关系。

  • 有时必须要在子类中添加新方法,扩展接口,这种替代是不完美的,也就是“is-like-a”(像是一个)的关系。(这里子类添加新接口时还是要考虑它的基类是否不够一般化,也就是基类是不是可以直接新增接口,新增之后基类就处于更完善的状态,这就可以实现纯粹替代了)

举例:假设我有一个只能制冷的空调,那么我把它的制冷系统作为一个基类,具有控制冷气的接口,然后空调的制冷设备坏了,我用一个既可以制热又可以制冷的替换之前的制冷设备,尽管新对象已经增加制热的接口,但是现在这个系统它只有控制冷气的接口,现在是不是觉得这个制冷系统不够一般化,应该更换为温度控制系统(既能制冷也能制热),基类里增加了制热接口,这就可以套用替换原则了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值