问题出现在毕老师JAVA基础视频第15天-12-集合框架(泛型限定)中
代码如下:
- import java.util.*;
- class GenericAsk
- {
- public static void main(String[] args)
- {
-
- ArrayList<Person> al = new ArrayList<Person>();
- al.add(new Person("person01"));
- al.add(new Person("person02"));
- al.add(new Person("person04"));
- printColl(al);
-
- ArrayList<Student> al1 = new ArrayList<Student>();
- al1.add(new Student("stu--01"));
- al1.add(new Student("stu--03"));
- al1.add(new Student("stu--05"));
- printColl(al1);
- //相当于ArrayList<Student> al = new ArrayList<Person>(); 会报错
- //这个表达式两边的数据类型必须相同!
-
- }
- /*
- public static void printColl(ArrayList<? extends Person> al)
- {
- Iterator<? extends Person> it = al.iterator();
- while(it.hasNext())
- {
- System.out.println(it.next().getName());
- }
- }
- */
- public static void printColl(ArrayList<? super Student> al)
- {
- Iterator<? super Student> it = al.iterator();
- while(it.hasNext())
- {
- System.out.println(it.next().getName());
- }
- }
- }
- class Person
- {
- private String name;
- Person(String name)
- {
- this.name = name;
- }
- public String getName()
- {
- return name;
- }
- }
- class Student extends Person
- {
- Student(String name)
- {
- super(name);
- }
- }
复制代码
如果是用<? extends Person>就可以编译通过。
如果用<? super Student>就不能编译通过。报如下错误:
---------- 编译java程序 ----------
GenericAsk.java:37: 错误: 找不到符号
System.out.println(it.next().getName());
^
符号: 方法 getName()
位置: 类 Object
1 个错误
输出完成 (耗时 1 秒) - 正常终止
想问的是,子类不是可以直接继承父类的方法么?为什么这里就找不到getName()方法呢?
|
|