Java学习笔记:继承与多态
在这个星期的Java课实验课中,实验内容是继承与多态,当我刚看到题目时,竟然不知道该从何处下手,最近一个月在忙着做安卓,一直也没写博客学习笔记,Java也没怎么认真看,一个暑假的学习竟然忘了不少,实在是捡了芝麻丢了西瓜。在思考了一个多小时之后,并且是在把书中关于继承与多态的部分又看了一遍后,才终于有了思路。好了废话不多说,让我们看一下这道题。
Cola公司的雇员分为以下若干类:(知识点:多态)
(1) ColaEmployee :这是所有员工总的父类,属性:员工的姓名,员工的生日月份。
方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100 元。
(2) SalariedEmployee : ColaEmployee 的子类,拿固定工资的员工。
属性:月薪
(3) HourlyEmployee :ColaEmployee 的子类,按小时拿工资的员工,每月工作超出160 小时的部分按照1.5 倍工资发放。
属性:每小时的工资、每月工作的小时数
(4) SalesEmployee :ColaEmployee 的子类,销售人员,工资由月销售额和提成率决定。
属性:月销售额、提成率
(5) 定义一个类Company,在该类中写一个方法,调用该方法可以打印出某月某个员工的工资数额,写一个测试类TestCompany,在main方法,把若干各种类型的员工放在一 个ColaEmployee 数组里,并单元出数组中每个员工当月的工资。
在刚开始拿到这道题时,我在如何写Company类处卡住了,不知道在TestCompany类中如何去调用Company中的方法,不知道Company类中的打印工资的方法该怎么写,当时我想的是,因为ColaEmloyee数组储存的是不同种类型的数据,虽然整个数组是ColaEmployee类的,可以Company类中的方法定义一个ColaEmployee的形参,但又该怎么输出呢,因为每种员工的工资计算方式是不一样的,所以我就在这里卡住了。但我在看了一遍书后,才想起来可以在ColaEmployee类中写一个getSalary()输出奖励的工资,然后在ColaEmployee的子类中,即各类员工的类中去通过使用Override来重载父类中的getSalary方法,同时通过super调用父类的getSalary方法来输出奖励工资,而同时又能根据不同员工的类型来输出工资,然后再在Company方法中去调用对象的getSalary方法。
代码如下:
ColaEmployee类:
public class ColaEmployee { public String name; public int birth; public double getSalary(int month){ double s=0; if(this.birth==month){ s=100; } return s; } }
public class SalariedEmployee extends ColaEmployee{ public double salary_month; @Override public double getSalary(int month){ return salary_month + super.getSalary(month); } }
public class HourlyEmployee extends ColaEmployee{ public double salary_hour; public double hour; @Override public double getSalary(int month){ if (hour > 160) { return (float) (salary_hour * 160 + (hour - 160) * salary_hour * 1.5 + super.getSalary(month)); } else { return salary_hour * hour + super.getSalary(month); } } }
public class SalesEmployee extends ColaEmployee{ public double sale_month; public double percent; @Override public double getSalary(int month) { return sale_month * percent + super.getSalary(month); } }
import java.util.Scanner; public class Company { public void output_money(ColaEmployee coe[],int Month){ for(int i=0;i<coe.length;i++){ double gs=coe[i].getSalary(Month); System.out.println(Month+"月"+coe[i].name+"的工资是"+gs); } } }
import java.util.Scanner; public class TestCompany { public static void main(String[] args){ Company c=new Company(); Scanner i=new Scanner(System.in); System.out.print("请输入要查询的月份:"); int m=i.nextInt(); SalariedEmployee ade=new SalariedEmployee(); SalesEmployee se=new SalesEmployee(); HourlyEmployee he=new HourlyEmployee(); ColaEmployee[] ce=new ColaEmployee[]{ade,se,he}; ade.birth=1; ade.name="张三"; ade.salary_month=2000; se.sale_month=1000; se.birth=2; se.name="李四"; se.percent=0.5; he.birth=3; he.name="王五"; he.hour=200; he.salary_hour=10; c.output_money(ce, m); i.close(); } }