JAVA泛型的应用实例
题目要求:员工类Employee
有:服务员类Waiter 经理类manager 厨师类Cooker继承员工类Employee
要求:
1.将服务员 厨师 经理放到三个不同的集合中,
2.定义一个通用方法,将集合当参数传入,遍历集合,并调用各自的工作方法work();
//父类
public abstract class Employee{
private String name;
private String id;
//空参构造器
public Employee(){}
//有参构造
public Employee(String name,String id){
this.name = name;
this.id = id;
}
//set方法
public void setName(String name){
this.name = name;
}
public void setId(String id){
this.id = id;
}
//get方法
public String getName(){
return this.name;
}
public String getId(){
return this.id;
}
//抽象方法
public void work();
}
=======================
子类:waiter
public class Waiter extends Employee{
//构造方法
public Employee(String name,String id){
super(name,id); //调用父类的有参构造方法
}
//重写父类的抽象方法、
public void work(){
System.out.println("服务员在上菜");
}
}
=======================
子类:cooker
public class Cooker extends Employee{
//构造器
public Cooker(String name,String id){
super(name,id);
}
//重写父类抽象方法
public void work(){
System.out.println("厨师在做饭");
}
}
=======================
子类:manager
public class Manager extends Employee{
//构造器
public Manager(String name,String id){
super(name,id);
}
//重写父类抽象方法
public void work(){
System.out.println("经理在管理");
}
}
=======================
测试类
public static void main(String[] args){
ArrayList<Cooker> cooker = new ArrayList<Cooker>();
ArrayList<Waiter> waiter = new ArrayList<Waiter>();
ArrayList<Manager> manager = new ArrayList<Manager>();
//添加对象
cooker.add(new Cooker("张三","CK001"));
cooker.add(new Cooker("李四","CK002"));
waiter.add(new Waiter("静静","WT001"));
waiter.add(new Waiter("欣欣","WT002"));
manager.add(new Manager("王经理","MN001"));
//定义方法,集合当成方法的参数传入,在方法中实现各自方法的调用
1. 如果定义为public static void method(ArrayList<Cooker> arr){}, 只能传入Cooker类,其它两个类则不能传入
2. 如果定义为public static void method(ArrayList<Employee> arr){} ,it.next()接收到的是Employee对象,需要强转。如果方法内定义Waiter(it.next());强转成服务员类,则传入厨师类时则会抛异常
3. 如果使用通配符public static void method(ArrayList<?> arr){} ,接收到的是Object对象,同样需要强转,也会抛异常
4. 所以,只能 public static void method(ArrayList<? extends Employee> arr){ }意即,只要是Employee的子类,都可以传入
public static void method(ArrayList<? extends Employee> arr){
Iterator<Employee ?> it = arr.iterator();
while(it.hasNext)){
it.next().work();
}
}
}
public static void method(ArrayList<? superEmployee> arr) 限定的是子娄
浙公网安备 33010602011771号