面向对象编程之继承

一、什么是继承?

        继承是面向对象软件技术当中的一个概念。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
       Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。

二、继承的特点

(1)java只支持单继承,不支持多继承

单继承指的是一个子类只能有一个父类,通俗的说就是一个儿子只能有一个父亲(你懂得)。在C++中是可以多继承的,但为什么java要这么设计呢?这就要提到一个哥们James Gosling(java语言之父) 当时他在设计java的时候是为了改进c++中各种不合理的设计,在C++中,一个儿子(子类)是有多个爸爸的(父类),James Gosling大吼一声:我绝不纵容这种情况发生!开个玩笑,他当时发现如果沿袭C++这一设计,在实际应用的时候会很不爽,比如说第一个父类存在一个method方法,巧了第二个父类也存在一个method方法,诶,那当我子类调用method方法时是调用第一个父类里的方法还是第二个父类里的方法呢?于是乎尴尬了,所以java语言取消了这一规定,只可以单继承。

(2)但是支持多层继承

多层继承意思是说,子类A可以继承父类B,父类B可以继承B的父类C。那又有问题了,那难道C是A的爷爷吗?那会不会有太爷爷、祖爷爷?当然不会。在Java中,这种继承关系叫做多层继承。B叫做A的直接父类,而C是A的间接父类。 那爷爷类也就是C类有么有它的父类呢?肯定是有的。在java中有一个类叫Object类,所有的类都直接继承或者间接继承与object类,他就是所有java类的祖宗类(just a joking)。

三、继承的LSP原则

       里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

1、子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法;

 2、子类中可以增加自己特有的方法。

这个原则在使用中有如下约束:

1、子类型可以增加方法,但不可删除

2、子类型需要实现抽象类型中的所有未实现方法

3、子类型中重写的方法必须有相同或子类型的返回值或者符合co-variance的参数

4、子类型中重写的方法必须使用同样类型的参数或者符合contra-variance的参数

5、子类型中重写的方法不 能抛出额外的异常

总体而言,就是子类型规约更强 :更强的不变量、更弱的前置条件以及更强的后置条件

四、继承的实现

前面说了继承如何理解和规范,那接下来就来就会想继承如何实现?诶别着急,预知后事如何,请听下篇我娓娓道来。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值