第十二章多态

就是把同一个父类的子类,用父类实现

例: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);
    }
}

你可能感兴趣的:(第十二章多态)