最近学了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) 养成类中保持有一个默认构造方法的习惯