【Java】 作业题 多态性 抽象类 接口 抽象方法
第6章 多态性
6.8 设计一个人员类(Person),包含姓名,方法pay()代表人员的工资支出;方法toString()输出人员的信息。从Person类派生出教师类(Teacher)和大学生类(CollegeStudent),其中:教师的工资支出=基本工资+授课时数*30,大学生的工资支出=奖学金支出。
增加行政员工类(AdministrativeStaff),行政员工的工资支出=基础工资+考核奖励(优秀5000,良好3000,合格1000)。
(1)将人员类Person定义为抽象类,pay()为抽象方法,设计程序实现多态性。
(2)定义一接口,将pay定义为其抽象方法,设计程序实现多态性。
方法(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();
}
}//教师类
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();
}
}//大学生类
class AdministrativeStaff extends Person{
private double baseWage;//基础工资
private String grade;//考核等级
public AdministrativeStaff(String name,double baseWage,String grage) {
super(name);
this.baseWage=baseWage;
this.grade=grage;
}
public double pay() {
if(grade=="优秀")
return baseWage+5000;
else if(grade=="良好")
return baseWage+3000;
else if(grade=="合格")
return baseWage+1000;
else
return baseWage;
}
public String toString() {
return "姓名:"+this.name+"\t职务:行政员工\t工资支出:"+this.pay();
}
}//行政员工
public class Main{
public static void main(String[] args) {
Person[] per=new Person[5];
per[0]=new Teacher("张三",10000,10,50);
per[1]=new CollegeStudent("李四",3000);
per[2]=new AdministrativeStaff("王一",10000,"优秀");
per[3]=new AdministrativeStaff("王二",10000,"良好");
per[4]=new AdministrativeStaff("王三",10000,"合格");
for(int i=0;i<per.length;i++) {
System.out.println(per[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();
}
}//教师类
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();
}
}//大学生类
class AdministrativeStaff extends Person{
private double baseWage;//基础工资
private String grade;//考核等级
public AdministrativeStaff(String name,double baseWage,String grage) {
super(name);
this.baseWage=baseWage;
this.grade=grage;
}
public double pay() {
if(grade=="优秀")
return baseWage+5000;
else if(grade=="良好")
return baseWage+3000;
else if(grade=="合格")
return baseWage+1000;
else
return baseWage;
}
public String toString() {
return "姓名:"+this.name+"\t职务:行政员工\t工资支出:"+this.pay();
}
}//行政员工
class Main{
public static void main(String[] args) {
PersonPay[] per=new Person[5];
per[0]=new Teacher("张三",10000,10,50);
per[1]=new CollegeStudent("李四",3000);
per[2]=new AdministrativeStaff("王一",10000,"优秀");
per[3]=new AdministrativeStaff("王二",10000,"良好");
per[4]=new AdministrativeStaff("王三",10000,"合格");
for(int i=0;i<per.length;i++) {
System.out.println(per[i]);
}
}
}
运行结果截图:
一些细节:
Java一个文件当中可以由多个类,但是最多只能有一个类是public类型的。Java当中的main方法并不一定要放在public类型的类当中,但是eclipse编译器会默认到public类中找main方法,如果找不到会报错。我们可以修改Run configurations当中的Main class,这样程序就能够正常运行了。