java继承(抽象类、抽象方法)小应用

最近学了Java有关继承的知识,下面实现一个简单的例子
////////////////////////////例题如下:
假定要为某个公司编写雇员工资支付程序,这个公司有各种类型的雇员(Employee),不同类型的雇员按不同的方式支付工资:
(1)经理(Manager)——每月获得一份固定的工资
(2)销售人员(Salesman)——在基本工资的基础上每月还有销售提成。
(3)一般工人(Worker)——则按他每月工作的天数计算工资。
根据上述要求试用类的继承和相关机制描述这些功能,并编写一个Java Application程序,演示这些类的用法。
提示:应设计一个雇员类(Employee)描述所有雇员的共图特性,这个类应该提供一个计算工资的抽象方法ComputeSalary( ),使得可以通过这个类计算所有雇员的工资。经理、销售人员和一般工人对应的类都应该继承这个类,并重新定义计算工资的方法,进而给出它的具体实现。
实现代码如下:

public abstract class Employee {   //父类,描述雇员共有信息(抽象类)
	
	private String name;
	
	public Employee(){}
	public Employee(String name) {
		this.name=name;
}
	public String getName() {
		return name;
	}
	public abstract double ComputeSalary() ;  //抽象方法,计算雇员的工资,子类要重写
}

class Manager extends Employee{   //Manager类,计算经理工资

	private double monthwage;  //经理固定月工资
	
	public Manager() {}  
	public Manager(String name,double monthwage) {
		super(name);
		this.monthwage=monthwage;
	}
	public double ComputeSalary() {
		return monthwage;
	}
}
class Salesman extends Employee{  //计算销售人员工资
	
	private double baseSalary;  //基本工资
	private double commision;   //销售每件的提成
	private int qualtities;     //销售件数
	
	public Salesman() {}
	public Salesman(String name,double baseSalary,double commission,int qualitities) {
		 super(name);
		 this.baseSalary=baseSalary;
		 this.commision=commission;
		 this.qualtities=qualitities;
	}
	public double ComputeSalary() {
		return baseSalary+commision*qualtities;
	}
}

class Worker extends Employee{    //计算一般工人工资
	
		private double dailySalary;   //每天工资
		private int days;    //每月工作天数
				public Worker() {}
		public Worker(String name,double dailySalary,int days) {
			super(name);
			this.dailySalary=dailySalary;
			this.days=days;
		}
		public double ComputeSalary() {
			return dailySalary*days;
		}
}


//////////////////////
public class Employees {
	public static void main(String aegs[]) {
		Manager manager_1=new Manager("张三",6000);
		Salesman salesman_1=new Salesman("李四",2500,30,90);
		Worker worker_1=new Worker("王五",200,24);
		
		System.out.println("张三这个月的工资为"+manager_1.ComputeSalary()+"元");
		System.out.println("李四这个月的工资为"+salesman_1.ComputeSalary()+"元");
		System.out.println("王五这个月的工资为"+worker_1.ComputeSalary()+"元");
	}
}

(1) 继承通过关键字extends实现,而且只能继承一个父类。
(2) 如果父类没有默认构造函数,子类一定要调用方法:super(参数列表);即父类的构造方法,该方法只能在子类构造方法第一行。
(3) 关键字super还可以在子类中调用被隐藏的父类方法和变量
(4) 对于父类有抽象方法,子类要重写,否则子类就要声明为抽象类。而且重写抽象方法一定要注意参数列表保持一致,参数列表不一致就认为没有重写父类的抽象方法。
(5) 养成类中保持有一个默认构造方法的习惯

你可能感兴趣的:(java)