第十五周 作业
4、 Cola公司的雇员分为以下若干类:(知识点:多态) [必做 题]
4.1 ColaEmployee :这是所有员工总的父类,属性:员工的 姓名,员工的生日月份。方法:getSalary(int month) 根据参数 月份来确定工资,如果该月员工过生日,则公司会额外奖励 100 元。
4.2 SalariedEmployee : ColaEmployee 的子类,拿固定工 资的员工。属性:月薪 课后作业
4.3 HourlyEmployee :ColaEmployee 的子类,按小时拿工 资的员工,每月工作超出160 小时的部分按照1.5 倍工资发 放。属性:每小时的工资、每月工作的小时数
4.4 SalesEmployee :ColaEmployee 的子类,销售人员, 工资由月销售额和提成率决定。属性:月销售额、提成率
4.5 定义一个类Company,在该类中写一个方法,调用该 方法可以打印出某月某个员工的工资数额,写一个测试类 TestCompany,在main方法,把若干各种类型的员工放在一 个ColaEmployee 数组里,并单元出数组中每个员工当月的 工资。
ColaEmployee:
package mrb; public class ColaEmployee { protected String name; protected int month; protected int birthdayMonth; public ColaEmployee() { super(); } public ColaEmployee(String name, int month, int birthdayMonth) { super(); this.name = name; this.month = month; this.birthdayMonth = birthdayMonth; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getMonth() { return month; } public void setMonth(int month) { this.month = month; } public double getSalary(int month) { return 0; } }
SalariedEmployee :
package mrb; public class SalariedEmployee extends ColaEmployee{ protected double money; public SalariedEmployee() { super(); } public SalariedEmployee(String name, int month, int birthdayMonth, double money) { super(name, month, birthdayMonth); this.money = money; } public double getSalary(int month){ if (birthdayMonth==month){ return money+100; }else{ return money; } } }
HourlyEmployee :
package mrb; public class HourlyEmployee extends ColaEmployee { protected double xsmoney; protected int hour; public HourlyEmployee() { super(); } public HourlyEmployee(String name, int month, int birthdayMonth, double xsmoney, int hour) { super(name, month, birthdayMonth); this.xsmoney = xsmoney; this.hour = hour; } public double getSalary(int month){ if(super.birthdayMonth==month){ if(hour>160){ return xsmoney*160+(hour-160)*xsmoney*1.5+100; }else{ return xsmoney*160+100; } }else{ if(hour>160){ return xsmoney*160+(hour-160)*xsmoney*1.5; }else{ return xsmoney*160; } } }
SalesEmployee :
package mrb; public class SalesEmployee extends ColaEmployee { protected int monthlySales; protected double commissionRate; public SalesEmployee() { super(); } public SalesEmployee(String name, int month, int birthdayMonth, int monthlySales, double commissionRate) { super(name, month, birthdayMonth); this.monthlySales = monthlySales; this.commissionRate = commissionRate; } public double getSalary(int month) { if (super.birthdayMonth == month) { return monthlySales *(1+ commissionRate) + 100; } else { return monthlySales *(1+ commissionRate); } } }
package mrb; public class Company { public void show(ColaEmployee a,int month) { System.out.println(a.name +"在" + month + "月的月薪为" + a.getSalary(month)); } }
package mrb; public class TestCompany { public static void main(String[] args) { ColaEmployee a[] = { new SalariedEmployee("普通员工",2,2, 3000), new HourlyEmployee("小时员工", 4, 3, 18, 300), new SalesEmployee("销售部员工", 7, 2, 2000, 0.3)}; for (int i = 0; i < a.length; i++) { new Company().show(a[i],6); } } }
5、利用接口实现动态的创建对象[选做题]
5.1 创建4个类: • 苹果 • 香蕉 • 葡萄 • 园丁 •
5.2 在三种水果的构造方法中打印一句话. •
5.3 要求从控制台输入一个字符串,根据字符串的值来判断创建三种水果中哪个类的对象
以苹果类为例 • class apple •
{
public apple()
{ System.out.println(―创建了一个苹果类的对象‖);
}
}
类图如下:
package mrb; import java.util.Scanner; public class ShuiGuo{ public static void main(String[] args) { // TODO Auto-generated method stub ShuiGuo g = new ShuiGuo(); g.creat(); } public Fruit creat() { Fruit f= null; Scanner sc = new Scanner(System.in); String str= sc.next(); if(str.equals("苹果")) { f=new Apple(); } if(str.equals("梨")) { f=new Pear(); } if(str.equals("桔子")) { f=new Orange(); } return f; } } interface Fruit{ } class Apple implements Fruit{ Apple(){ System.out.println("创建了一个苹果类的对象"); } } class Pear implements Fruit{ Pear(){ System.out.println("创建了一个梨类的对象"); } } class Orange implements Fruit{ Orange(){ System.out.println("创建了一个桔子类的对象"); } }