我刚开始学习 Java 上的通配符和子类型,并尝试测试我学到的东西。
认为:
Class A { public int y=1; }
Class B extends A { public int x=2; }
主要:
List<B> lb = new ArrayList<>();
lb.add(new B());
System.out.println(lb.get(0).y); //Displays member y of Class A
List<? extends A> la = lb;
System.out.println(la.get(0).y); //Can access member y of Class A
List<A> la1 = new ArrayList<>();
la1.add(new A());
System.out.println(la1.get(0).y); //Displays member y of Class A
List<? super B> lb1 = la1;
System.out.println(lb1.get(0).y); //Cannot access member y of Class A? Why?
我不明白为什么我不能使用下界通配符访问成员 y,而可以使用上限通配符。我错过了什么吗?