0
点赞
收藏
分享

微信扫一扫

对泛型上下限(协变,逆变)理解的拙见

静鸡鸡的JC 2022-03-24 阅读 54

首先要了解一下以下几点:

  • 子类是对父类的扩展,拥有比父类更多的内容,类似包裹关系。
  • 接收类型的继承关系级别要大于等于该类,也就是说只有其父类和本身能正常接收,否则需要强制转型。
  • 子类转型成父类,会让父类涌入很多新东西,包括重写的。而父类转型成子类,子类本就有了父类的所有内容(包括私有,只是不能使用),认为没得鸟用不推荐,则需要强制转型。
  • 转型后调用父类有的方法会优先调用子类中重写过的(说白了就是以子类为主,子类也有隐藏了的没有重写的父类方法)。

<? extends A>:

  1. A或继承自A的子类都能适应进去,而A的级别最大。
  2. 只知道最大级别是A和适应进去都是A或A的派生类,再存其他的会有其他的新内容,子类内容会越来越多是无法控制的,适应进去后不能再添加其他派生类,只能有这一系列类,可取值。
  3. 取值时,来接收的对象继承级别得是最大或已知最大的,因为不确定里面级别最大的是哪个类。如用Object或A接收。

<? super A>

  1. A或A的父类能适应进去,A的级别最小。
  2. A的级别最小,适应进去的父类其实内容是越来越小的且类的内容在A里都有(方法名,属性名等都知道),能添加其他父类,能取值。
  3. 取值时,不知道已知的最大父类,只能用Object对象来接收。

可能有些表述不清,如有矛盾,还请多多纠正。

举报

相关推荐

0 条评论