就是把同一个父类的子类,用父类实现
例:feed(Pet pet)
多态
同一个引用类型,使用不同的实例而执行不同的操作;
使用多态的思路
-编写父类
-编写子类 , 子类重写父类的方法
-运行时,使用父类的类型,子类的对象
例: Pet pet= new Dog();
使用多态优化主人给宠物喂食
例: public class Master {
public void feed(Pet pet){ //使用父类作为方法的形参
Pet.eat(); //喂食
}
}
测试类的改变
例:Pet pet =new Dog();
Master master=new Master();
mater .feed(pet) // 同一种操作方式,不同的操作方法
练习
工资支付系统
定义一个Employee抽象基类(name)
公司有以下几种员工:
开发人员:工资计算方式,每月固定工资
销售人员:底薪+提成
硬件工程师:生产零件,每个50元
小时工:按工作时间付工资,每小时30元
主类(测试类)
创建不同类型的6名员工对象,计算他们应付的月工资之和
例:package com.emp;
//开发类
/**
* Created by ttc on 2018/5/29.
*/
public class Developer extends Employee {
int salary; //每月工资
public Developer(int salary) //构造方法
{
this.salary = salary;
}
@Override //计算工资
public int calcSalary() {
return salary;
}
}
例:package com.emp;
/**
* Created by ttc on 2018/5/29.
*/
public abstract class Employee { //抽象类
String name; //定义变量名字
public abstract int calcSalary(); //抽象计算工资的方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
例:package com.emp;
//销售类
/**
* Created by ttc on 2018/5/29.
*/
public class SalesMan extends Employee{
int base_sal; //底薪
int comm; //提成
public SalesMan(int base_sal, int comm) //有参构造方法
{
this.base_sal = base_sal;
this.comm = comm;
}
@Override
public int calcSalary() { //计算工资
return base_sal + comm;
}
}
例:package com.emp;
//工程师类
/**
* Created by ttc on 2018/5/29.
*/
public class HardwareEngineer extends Employee{
int num;
public HardwareEngineer(int num) //有参构造方法
{
this.num = num;
}
@Override
public int calcSalary() {
return 50*num;
} //计算工资
}
例:package com.emp;
//小时类
/**
* Created by ttc on 2018/5/29.
*/
public class HourWorker extends Employee {
int hours;
public HourWorker(int hours) //有参构造方法
{
this.hours = hours;
}
@Override
public int calcSalary() {
return 30*hours;
} //计算工资
}
例:package com.emp;
//测试类
/**
* Created by ttc on 2018/5/29.
*/
public class Main {
public static void main(String[] args) {
int index = 0;
Employee[] employees = new Employee[6]; //定义一个父类数组
employees[index++] = new Developer(10000);
employees[index++] = new SalesMan(2000,5000);
employees[index++] = new HardwareEngineer(120);
employees[index++] = new HourWorker(200);
employees[index++] = new HourWorker(300);
employees[index] = new HourWorker(500);
int sum = 0;
for(Employee employee : employees)
{
sum += employee.calcSalary();
}
System.out.println(sum);
}
}