// Java中的 super 和 extends
// -------------------------------------------------------------
// extends:上界》》不能往里存,只能往外取。 结合里氏替换原则就能明白。
// 列表的类型只限定了范围,并没有限定具体的类型,也就是可以存这个及其之类,但是
// 具体能存什么我不知道,自然就不能存了。
// --------------------------------------------------------------
// super:下界》》可以存,但是取出来的只能用Object类型。也是结合里氏替换原则就能明白。
// --------------------------------------------------------------
// 通配符? 和 泛型T的区别: 泛型T虽然是泛型,但是是同一种类型。 通配符?不确定是
// 具体的什么类型,只是限定了范围。
// --------------------------------------------------------------
void test () {
// -- super 上界
ArrayList<? super Animal> list = new ArrayList<>();
// 这个列表只能存放Animal及其子类,super限定了存放里边的必须是Animal或者其父类,但是具体的我们不知道。所以只能是按照里氏替换原则,所有父类出现
// 的地方都可以用子类来代替
list.add(new Animal());
// list.add(new Biology()); // 可以放Animal和任何Animal的子类
list.add(new Hippo());
// list.add(new Object());
// -- extends 上界
ArrayList<? extends Animal> list2 = new ArrayList();
// 下边的往里存都是会报错的,因为list2里边的类型是不确定的,除非存放一个最下层的类对象,否则都是不行的。 但是我们并没有最下层类这一说法。
// list2.add(new Animal());
// list2.add(new Biology());
// list2.add(new Hippo());
// list2.add(new Object());
// 虽然不可以add,但是可以直接赋值Animal及其子类列表
ArrayList<Animal> list3 =new ArrayList<>();
list2 = list3; // 这个是可以的,他里边的类型是确定的
ArrayList<Biology> list4 = new ArrayList<>();
// list2 = list4; // 这个是不对的,类型不对
}
Java中的 super 和 extends
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- Java中的通配符extends和super extends 读操作(Reading)给定以上的赋值语句,可以从f...
- List<Number> numbers = new ArrayList (); java的ArrayList有一...
- 意义不同 ? extends T 表示上界是T ? super T 表示下界是T 用法不同 以List为例List...
- 之前一直对Java泛型中的通配符不是很清楚,前几天专门研究了一下。Java中的泛型通配符分为以下三种: <? ex...
- Java 泛型 <? super T> 中 super 怎么 理解?与 extends 有何不同? super只能...