今天毕老师关于泛型的视频,有个问题,阐述如下:- import java.util.*;
- class Person {//定义一Person个类型
- private String name;
- Person(String name) {
- this.name = name;
- }
- public String getName() {
- return name;
- }
- }
- class Student4 extends Person //Student4继承Person
- {
- Student4(String name) {
- super(name);
- }
- }
- public class GenernicDemo4 {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- ArrayList<Student4> al = new ArrayList<Student4>();//新建一个Student4的ArrayList,并添加数据
- al.add( new Student4("abc1"));
- al.add(new Student4("abc2"));
-
- ArrayList<Person> al1 = new ArrayList<Person>();//新建一个Person的ArrayList,并添加数据
- al1.add( new Person("abc3"));
- al1.add( new Person("abc4"));
-
- printColl1(al1);//调用printColl1方法
- printColl1(al);
- }
-
- <blockquote>public static void printColl1(ArrayList<? extends Person> al)//定义printColl1方法,用于打印传入ArrayList中的数据
复制代码 当我将printColl1中的参数换成“ArrayList<? super Student4> al”,时,此时的it.next()无法调用Person类中的getName()方法,代码如下:- public static void printColl1(ArrayList<? super Student4> al)//定义printColl1方法,用于打印传入ArrayList中的数据
- {
- Iterator<? super Student4> it = al.iterator();
- while(it.hasNext())
- {
- System.out.println(it.next());<u><font color="#ff0000">//此出无法调用<span style="background-color: rgb(255, 255, 255);">Person类中的getName()方法</span></font></u>
- }
- }
复制代码 我的问题是,泛型的上限、下限,是不是有要求,比如此题中,写成ArrayList<? super Student4> al就不可以调用Person类中的getName()方法,而写成ArrayList<? extends Person> al就可以呢? |