【问题描述】
6.8 设计一个人员类(Person),包含姓名,方法pay()代表人员的工资支出;方法toString()输出人员的信息。从Person类派生出教师类(Teacher)和大学生类(CollegeStudent),其中:教师的工资支出=基本工资+授课时数*30,大学生的工资支出=奖学金支出。
增加行政员工类(Administrative),行政员工的工资支出=基础工资+考核奖励(优秀5000,良好3000,合格1000)。
(1)将人员类Person定义为抽象类,pay()为抽象方法,设计程序实现多态性。
(2)定义一接口,将pay定义为其抽象方法,设计程序实现多态性。
【Java代码】
(1)抽象类
//抽象类
abstract class Person {
protected String name;
public Person(String name){
this.name = name;
}
abstract public double pay();
abstract public String toString();
}
class Teacher extends Person {
private double price; //授课单价
private double baseWage; //基本工资
private int teachingHours; //授课时数
public Teacher(String name, double baseWage, double price, int teachingHours){
super(name);
this.baseWage = baseWage;
this.price = price;
this.teachingHours = teachingHours;
}
public double pay(){
return baseWage + teachingHours * price;
}
public String toString(){
return "姓名: " + this.name + "\t职位: 教师\t工资支出: " + this.pay() + "\n";
}
}
class CollegeStudent extends Person{
private double scholarship; // 奖学金
public CollegeStudent(String name, double scholarship){
super(name);
this.scholarship = scholarship;
}
public double pay(){
return scholarship;
}
public String toString(){
return "姓名: " + this.name + "\t职位: 学生\t工资支出: " + this.pay() + "\n";
}
}
class AdministrativeStaff extends Person{
private double baseWage1;
private String assess;
public AdministrativeStaff(String name, double baseWage1, String assess){
super(name);
this.baseWage1 = baseWage1;
this.assess = assess;
}
public double pay(){
if (assess == "优秀")
return baseWage1 + 5000;
else if(assess == "良好")
return baseWage1 + 3000;
else if(assess == "合格")
return baseWage1 + 1000;
else
return baseWage1;
}
public String toString(){
return "姓名: " + this.name + "\t职位: 行政员工\t工资支出: " + this.pay() + "\n";
}
}
public class text {
public static void main(String[] args) {
Person a[] = new Person[3];
a[0] = new Teacher("张三", 1000, 2, 49);
a[1] = new CollegeStudent("李四", 500);
a[2] = new AdministrativeStaff("王五", 2000, "优秀");
for(int i = 0; i < a.length; i++){
System.out.println(a[i]);
}
}
}
(2)接口
public interface PersonPay {
public double pay();
}
abstract class Person implements PersonPay {
protected String name;
public Person(String name){
this.name = name;
}
abstract public String toString();
}
class Teacher extends Person {
private double price; //授课单价
private double baseWage; //基本工资
private int teachingHours; //授课时数
public Teacher(String name, double baseWage, double price, int teachingHours){
super(name);
this.baseWage = baseWage;
this.price = price;
this.teachingHours = teachingHours;
}
public double pay(){
return baseWage + teachingHours * price;
}
public String toString(){
return "姓名: " + this.name + "\t职位: 教师\t工资支出: " + this.pay() + "\n";
}
}
class CollegeStudent extends Person{
private double scholarship; // 奖学金
public CollegeStudent(String name, double scholarship){
super(name);
this.scholarship = scholarship;
}
public double pay(){
return scholarship;
}
public String toString(){
return "姓名: " + this.name + "\t职位: 学生\t工资支出: " + this.pay() + "\n";
}
}
class AdministrativeStaff extends Person{
private double baseWage1;
private String assess;
public AdministrativeStaff(String name, double baseWage1, String assess){
super(name);
this.baseWage1 = baseWage1;
this.assess = assess;
}
public double pay(){
if (assess == "优秀")
return baseWage1 + 5000;
else if(assess == "良好")
return baseWage1 + 3000;
else if(assess == "合格")
return baseWage1 + 1000;
else
return baseWage1;
}
public String toString(){
return "姓名: " + this.name + "\t职位: 行政员工\t工资支出: " + this.pay() + "\n";
}
}
class WageText {
public static void main(String args[]){
Person a[] = new Person[3];
a[0] = new Teacher("张三", 1000, 2, 49);
a[1] = new CollegeStudent("李四", 500);
a[2] = new AdministrativeStaff("王五", 2000, "优秀");
for(int i = 0; i < a.length; i++){
System.out.println(a[i]);
}
}
}
【测试结果】