就是把同一個父類的子類,用父類實現(xiàn)
例:feed(Pet pet)
多態(tài)
同一個引用類型,使用不同的實例而執(zhí)行不同的操作;
使用多態(tài)的思路
-編寫父類
-編寫子類 , 子類重寫父類的方法
-運行時,使用父類的類型,子類的對象
例: Pet pet= new Dog();
使用多態(tài)優(yōu)化主人給寵物喂食
例: public class Master {
public void feed(Pet pet){ //使用父類作為方法的形參
Pet.eat(); //喂食
}
}
測試類的改變
例:Pet pet =new Dog();
Master master=new Master();
mater .feed(pet) // 同一種操作方式,不同的操作方法
練習
工資支付系統(tǒng)
定義一個Employee抽象基類(name)
公司有以下幾種員工:
開發(fā)人員:工資計算方式,每月固定工資
銷售人員:底薪+提成
硬件工程師:生產零件,每個50元
小時工:按工作時間付工資,每小時30元
主類(測試類)
創(chuàng)建不同類型的6名員工對象,計算他們應付的月工資之和
例:package com.emp;
//開發(fā)類
/**
* 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);
}
}