package cn.burce.Genetic;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import cn.burce.Hotel.*;
public class GeneticLearnHotel {
/*
* 将酒店的员工,厨师、服务员、经理分别存在3个集合里 定义方法,可以同时遍历3个集合,并调用工作方法
*/
public static void main(String[] args) {
ArrayList<Cooker> c = new ArrayList<>();
ArrayList<Waiter> w = new ArrayList<>();
ArrayList<Manager> m = new ArrayList<>();
c.add(new Cooker("厨师1", 1011));
c.add(new Cooker("厨师2", 1012));
c.add(new Cooker("厨师3", 1013));
w.add(new Waiter("服务员1", 1021));
w.add(new Waiter("服务员2", 1022));
w.add(new Waiter("服务员3", 1023));
m.add(new Manager("经理", 1030, 1000));
// ArrayList<String> m = new ArrayList<>(); 不是employee的子类报错
function(c);
function(w);
function(m);
}
/*
* 定义方法,可以同时遍历3集合,并调用方法 ?通配符,迭代器it.next()取出来的是object类型,调用不了方法
* 强制转换:it.next()=object o ==>employee 这样有风险,假设集合里不全是employee的子类就报错了
* 方法参数形式:控制住,参数只可以传递employee对象或者其子类 泛型的限定,本案例,父类固定为employee,子类可以是无限种
* 用?extends Employee 限制父类,上限限定 可以传递employee或者其子类
* 用?super Employee 限制子类,下限限定可以传递employee或者其父类
*/
public static void function(ArrayList<? extends Employee> coll) {
Iterator<? extends Employee> it = coll.iterator();
while (it.hasNext())
{
//System.out.println(it.next().getName());不知道为啥一加就报错
it.next().work();
}
}
}
