Java中的 super 和 extends
作者:
emdd2016 | 来源:发表于
2021-09-08 15:08 被阅读0次 // 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
本文链接:https://www.haomeiwen.com/subject/bruvwltx.html
网友评论