扫码关注官方订阅号
如题。为什么会是这样呢?
ringa_lee
注意对比的对象 A是B的子类 是A与B在比较 而List<A>是List<B>的子类 是List与List进行比较 你可以通过List<? extend b>这样的定义 来进行限定操作
List<A>
List<B>
List<? extend b>
因为都是List类,又没有继承关系
对象的继承代表了一种‘is-a’的关系,如果两个对象A和B,可以表述为‘B是A’,则表明B可以继承A。继承者还可以理解为是对被继承者的特殊化,因为它除了具备被继承者的特性外,还具备自己独有的个性。
父类和子类,或叫做基类和派生类,其中子类继承父类的所有特性,同时还定义新的特性。
List<A>的子类是class XXX extends List<A>
class XXX extends List<A>
Java里的泛型是通过 类型擦除 来实现的
Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会在编译器在编译的时候去掉。这个过程就称为类型擦除。
List <A> 和 List <B> 在编译完成以后,实际上指向的是同一份字节码 并不存在 List <A> 或者 List <B> 这2种类型 ,当然就更谈不上什么子类的问题了.
以下仅供参考 我C++不熟 你不是和C++模板搞混了? C++的泛型实现方式不同
在C++中 确实会为 List <A> 和 List <B> 生成2个class
因为List<A>.class不成立。泛型
List<A>.class
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
注意对比的对象
A是B的子类 是A与B在比较
而
List<A>是List<B>的子类 是List与List进行比较你可以通过
List<? extend b>这样的定义 来进行限定操作因为都是List类,又没有继承关系
对象的继承代表了一种‘is-a’的关系,如果两个对象A和B,可以表述为‘B是A’,则表明B可以继承A。继承者还可以理解为是对被继承者的特殊化,因为它除了具备被继承者的特性外,还具备自己独有的个性。
父类和子类,或叫做基类和派生类,其中子类继承父类的所有特性,同时还定义新的特性。
List<A>的子类是class XXX extends List<A>Java里的泛型是通过 类型擦除 来实现的
以下仅供参考 我C++不熟
你不是和C++模板搞混了?
C++的泛型实现方式不同
因为
List<A>.class不成立。泛型