哈工大软构感悟:接口与类,overload与override

接口与类

一个具体类对具体父类的继承和对接口的继承是有区别的。

对接口的继承具体父类的继承
具体类要实现接口的全部功能具体子类可以选择性重写具体父类的部分需要的功能
具体类都可以增加新功能

overload与override

overrideoverload
函数名与父类一致与父类一致
参数与父类一致与父类不一致
返回值不做要求不做要求

LSP替换原则

内容:

(1)子类型可以增加方法,但是不可以删除基类的方法·子类型需要实现抽象类型中的所有未实现方法

(2)当子类覆盖或实现父类的方法时,方法的返回值要比父类更严格。(子类型中重写的方法必须有相同或子类型的返回值或者符合 co-variance 的参数)

(3)当子类覆盖或实现父类的方法时,方法的形参要比父类方法的更为宽松。(子类型中重写的方法必须使用同样类型的参数或者符合 contra-variance 的参数)。

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

简单记为∶

●更强的不变量

● 更弱的前置条件

●更强的后置条件

LSP中的协变:

父类→子类∶越来越具体

返回值类型∶不变或更具体

异常的类型∶不变或更具体

LSP中的逆变:

父类→子类∶越来越具体

参数类型∶不变或越来越抽象

在Java中LSP与override和overload的关系:

在Java中,协变由override负责,此时:

函数名与父类一致

参数与父类一致

返回值与父类一致或者比父类更为具体

class T{
    Object a(int b){}
}

class S extends T{
    @Override
    String a (int b){}
}

逆变由overload负责,此时:

函数名与父类一致

参数比父类更为抽象

返回值与父类一致

class T{
    void c(String s){}
}

class S extends T{
    @Override
    void c(Object s){}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值