A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 慕容旺财 中级黑马   /  2015-7-4 19:00  /  241 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*

使用泛型限定 确定类型的上限和下限

*/

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()方法?
我在网上搜了 这个问题有人提 没人回答...

在这里先谢过了

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马