您的位置:首页 > 编程语言 > Java开发

Java学习笔记:继承与多态

2015-10-18 17:22 495 查看
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;

@Override
public double getSalary(int month){
return salary_month + super.getSalary(month);

}

}


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

}

}


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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java学习 继承 多态