JAVA LSP原则、委托

一、协变与逆变

若Cat类继承自Animal类,则可以Animal a = new Cat()

注意:

1.子类型可以增加方法但不能删除方法

2.子类型要实现抽象类型中所有方法

3.子类实现或覆盖父类方法时,返回值和异常要满足协变

4.子类实现或覆盖父类方法时,参数要满足逆变

协变:父类到子类越来越具体,而返回值和异常也要不变或越来越具体

如:Object->String Throwable->IOException

逆变:父类到子类越来越具体,而参数不变或越来越抽象

如:String->Object

但是java不支持逆变,将视为重载

二、子类型化

ArrayList<String>是List<String>的子类,但List<String>不是List<Object>的子类

采用通配符实现

List<Number>是List<?>的子类

List<Number>是List<? extends Object>的子类(Number是Object的子类)

List<Object>是List<? super Number>的子类(Object是Number的父类)

三、委托

一个对象请求另一个对象,可以代替继承复用

1.临时委托Dependency:没有固有的field

2.永久委托Association:有固有field

3. 更强的Composition:委托关系通过初始化建立,无法修改

4.更弱的 Aggregation:委托关系通过方法、构造函数、传入参数建立,可以修改

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值