java - A是B的子类,为什么List<A>就不是List<B>的子类?
ringa_lee
ringa_lee 2017-04-17 13:06:55
[Java讨论组]

如题。为什么会是这样呢?

ringa_lee
ringa_lee

ringa_lee

全部回复(6)
迷茫

注意对比的对象
A是B的子类 是A与B在比较
List<A>List<B>的子类 是List与List进行比较
你可以通过List<? extend b>这样的定义 来进行限定操作

ringa_lee

因为都是List类,又没有继承关系

怪我咯

对象的继承代表了一种‘is-a’的关系,如果两个对象A和B,可以表述为‘B是A’,则表明B可以继承A。继承者还可以理解为是对被继承者的特殊化,因为它除了具备被继承者的特性外,还具备自己独有的个性。

父类和子类,或叫做基类和派生类,其中子类继承父类的所有特性,同时还定义新的特性。

巴扎黑

List<A>的子类是
class XXX extends List<A>

ringa_lee

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不成立。
泛型

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号