/*
使用泛型限定 确定类型的上限和下限
*/
import java.util.*;
class GenericDemo7
{
public static void main(String[] args)
{
ArrayList<Person> al1 = new ArrayList<Person>();
al1.add(new Person("zhangsan",1348));
al1.add(new Person("lisi",239));
al1.add(new Person("wangwu",972387));
display(al1);
ArrayList<Worker> al2 = new ArrayList<Worker>();
al2.add(new Worker("zhangsan",1348));
al2.add(new Worker("lisi",239));
al2.add(new Worker("工人wangwu",972387));
show(al2);
sop("Mission Complete!");
}
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void show(ArrayList<? extends Person> al1)
{
Iterator<? extends Person> it1 = al1.iterator();
while (it1.hasNext())
{
//局限性 在泛型类型不明确的情况下 无法打印两个属性!
//如果是有两次next()会出现NoSuchElement异常
sop(it1.next().getName()/*+"::"+it1.next().getNumber()*/);
}
}
//没有具体的示例 不知道这里有什么问题
public static void display(ArrayList<? super Person> al)
{
Iterator<? super Person> it = al.iterator();
while (it.hasNext())
{
sop(it.next().getName());
}
}
}
class Person
{
String name;
int number;
Person(String name, int number)
{
this.name = name;
this.number = number;
}
public String getName()
{
return name;
}
public int getNumber()
{
return number;
}
}
class Student extends Person
{
Student(String name, int number)
{
super(name,number);
}
public void motto()
{
System.out.println("好好学习 天天向上");
}
}
class Worker extends Person
{
Worker(String name, int number)
{
super(name,number);
}
public void motto()
{
System.out.println("好好工作 健康生活");
}
}
编译通过 运行时候报错
说getName()找不到符号
我有个疑问:为啥 ? super不好使了???? 难道super直接搞到Object上面去了 所以报错说没有getName()方法?
我在网上搜了 这个问题有人提 没人回答...
在这里先谢过了 |
|