美文网首页
Java中extends和super

Java中extends和super

作者: lanmoyingsheng | 来源:发表于2019-11-27 23:59 被阅读0次
    class Food {}
    class Fruit extends Food {}
    class Apple extends Fruit {}
    class Banana extends Fruit{}
    
    public class Main {
    
        public static void main(String[] args) {
      
           List<? extends Fruit> list2 = new ArrayList<Banana>();
            // list2.add(new Apple()); // list2真正修饰的元素不知道。
            Fruit fruit = list2.get(0);
      
            // list1声明元素是Fruit及父类的list,
            List<? super Fruit> list1 = new ArrayList<Food>();
            list1.add(new Apple());
            list1.add(new Banana());
            // 迭代不方便,因为不清楚具体哪个父类
            // Fruit object = list1.get(0);
    
        }
    }
    

    从代码中可以看到
    1、List<? super Fruit> list1只是在声明时,修饰的是super超类的list,其实是可以往里面加各种子类的;而获取就时,不能保证是Fruit类对象,也就会报错。
    2、List<? extends Fruit> list2只在声明时,修饰的是extends子类的list。因为不知道具体是哪个类,所以不适合添加元素;适合获取元素。

    最后说一下,很多老外博客都会说PECS规则,即生产者用extend,消费者用super,既是生产者也是消费者必须指定类型。这个我觉得这个是结论。

    部分参考:https://blog.csdn.net/qq_33561055/article/details/87289812

    相关文章

      网友评论

          本文标题:Java中extends和super

          本文链接:https://www.haomeiwen.com/subject/ldqvwctx.html