Java 作业题 多态性 抽象类 接口 抽象方法

此博客介绍了如何使用Java实现多态性,通过抽象类和接口来设计人员类(Person)、教师类(Teacher)、大学生类(CollegeStudent)和行政员工类(AdministrativeStaff)。每个类都实现了工资支出(pay)的方法,根据各自的角色有不同的计算方式。在主程序中创建这些类的对象并输出,展示了多态性的特性。
摘要由CSDN通过智能技术生成

【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,这样程序就能够正常运行了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

球王武磊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值