美文网首页
Java中的 super 和 extends

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