package collection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class GenericTest01 {
public static void main(String[] args) {
/*// 不使用泛型机制,分析程序存在缺点
List myList = new ArrayList();
// 准备对象
Cat c = new Cat();
Bird b = new Bird();
// 将对象添加到集合当中
myList.add(c);
myList.add(b);
// 遍历集合
Iterator it = myList.iterator();
while (it.hasNext()){
Object obj = it.next();
if (obj instanceof Cat){
Cat cat = (Cat)obj;
cat.catchMouse();
}
if (obj instanceof Bird){
Bird bird = (Bird)obj;
bird.fly();
}
}*/
// 使用泛型,表示List集合中只允许存储Animal类型的数据
List<Animal> myList = new ArrayList<Animal>();
// 准备对象
Cat c = new Cat();
Bird b = new Bird();
// 将对象添加到集合当中
myList.add(c);
myList.add(b);
// 遍历集合,表示迭代器迭代的是Animal类型
Iterator<Animal> it = myList.iterator();
while (it.hasNext()){
/*// 不需要向下转型
Animal a = it.next();
a.move();*/
// 如果调用子类特有的方法,还是需要向下转型
Animal a = it.next();
if (a instanceof Cat) {
Cat cat = (Cat)a;
cat.catchMouse();
}
if (a instanceof Bird) {
Bird bird = (Bird)a;
bird.fly();
}
}
}
}
class Animal{
public void move(){
System.out.println("动物在移动!");
}
}
class Cat extends Animal{
public void catchMouse(){
System.out.println("猫抓老鼠!");
}
}
class Bird extends Animal{
public void fly(){
System.out.println("鸟儿在飞翔!");
}
}