Java学习笔记:继承与多态

来源:互联网 发布:ug8.0编程视频 编辑:程序博客网 时间:2024/05/16 01:47

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;}}


SalriedEmployee类:

public class SalariedEmployee extends ColaEmployee{public double salary_month;@Overridepublic double getSalary(int month){return salary_month + super.getSalary(month); }}

HourlyEmployee类:

public class HourlyEmployee extends ColaEmployee{public double salary_hour;public double hour;@Overridepublic 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);          } }}


SalesEmployee类:

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

Company类:

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

TestCompany类:

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();}}




0 0
原创粉丝点击