多态的应用-多态参数
多态的应用-多态数组
- 多态数组
- 数组的定义类型为父类型,里面保存的实际元素类型是子类类型
- 多态参数
- 方法定义的形参类型为父类型,实参类型允许为子类型
定义员工类 Employee,包含姓名和月工资【private】,以及计算年工资 getAnnual 的方法。普通员工和经历继承了员工,经理类多了奖金 bonus 属性和 管理 manage 方法普通员工类多了 work 方法,普通员工和经理类要求重写 getAnnual 方法测试类中添加一个方法 showEmpAnnual(Employee e)。实现获取任何员工对象的年工资,并在 main 方法中该方法 [e.getAnnual()] 测试类中添加一个方法,testWork,如果是普通员工,则调用 work 方法,如果是经理,则调用 manage 方法。
Employee.java
public class Employee{
private String name;
private double salary;
public Employee(String name, double salary){
this.name = name;
this.salary = salary;
}
// 得到年工资的方法
public double getAnnual(){
return 12 * salary;
}
public void setname(String name){
this.name = name;
}
public String getname(){
return name;
}
public void setsalary(double salary){
this.salary = salary;
}
public double getsalary(){
return salary;
}
}
Manager.java
public class Manager extends Employee{
private double bonus;
public Manager(String name, double salary, double bonus){
super(name, salary);
this.bonus = bonus;
}
public void setbonus(double bonus){
this.bonus = bonus;
}
public double getbonus(){
return bonus;
}
public void manage(){
System.out.println("Manager " + getname() + " is managing.");
}
// overwrite getAnnual()
public double getAnnual(){
return super.getAnnual()+bonus;
}
}
Worker.java
public class Worker extends Employee{
public Worker(String name, double salary){
super(name, salary);
}
public void work(){
System.out.println("worker " + getname() + " is working ");
}
public double getAnnual(){
return super.getAnnual();
}
}
mains.java
/*
定义员工类 Employee,包含姓名和月工资【private】,
以及计算年工资 getAnnual 的方法。普通员工和经历
继承了员工,经理类多了奖金 bonus 属性和 管理 manage 方法
普通员工类多了 work 方法,普通员工和经理类要求重写 getAnnual 方法
测试类中添加一个方法 showEmpAnnual(Employee e)。实现获取任何员工
对象的年工资,并在 main 方法中该方法 [e.getAnnual()]
测试类中添加一个方法,testWork,如果是普通员工,则调用 work 方法,
如果是经理,则调用 manage 方法。
*/
public class mains{
public static void main(String[] args) {
Worker tom = new Worker("tom", 2500);
Manager milan = new Manager("milan", 5000, 200000);
mains mains = new mains();
mains.showEmpAnnual(tom);
mains.showEmpAnnual(milan);
mains.testWork(tom);
}
/*
测试类中添加一个方法 showEmpAnnual(Employee e)。实现获取任何员工
对象的年工资,并在 main 方法中该方法 [e.getAnnual()]
*/
public void showEmpAnnual(Employee e){
System.out.println(e.getAnnual());
}
/*
测试类中添加一个方法,testWork,如果是普通员工,则调用 work 方法,
如果是经理,则调用 manage 方法。
*/
public void testWork(Employee e){
if (e instanceof Worker) {
((Worker) e).work(); // 向下转型
}else if( e instanceof Manager){
((Manager) e).manage();
}else{
System.out.println("...");
}
}
}
30000.0
260000.0
worker tom is working

浙公网安备 33010602011771号