案例描述:
某公司的人员分为员工和经理两种,但经理也属于员工中的一种,公司的人员都有自己的姓名和地址,员工和经理都有自己的工号、工资、工龄等属性,但经理不同员工的是,经理有自己在公司对应的级别。假设每次给员工涨工资一次能涨10,经理能涨20%。本案例要求利用多态实现给员工和经理涨工资。
运行结果:
代码如下:
创建父类:
/**
* 2022/3/23
*/
public class Person {
private String name ; // 名字
private String address; // 地址
public Person(String name, String address) {
this.name = name;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
创建抽象类:
/**
* 2022/3/23
*/
public abstract class Employee extends Person{
private String ID ; // 工号
private double wages ; // 工资
private int age ; // 工龄
public Employee(String name, String address, String ID, double wages, int age) {
super(name, address); // 调用父类中的元素
this.ID = ID;
this.wages = wages;
this.age = age;
}
public abstract void add(String position); // 涨薪方法
public double getWages() {
return wages;
}
public void setWages(double wages) {
this.wages = wages;
}
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
创建子类继承抽象类:
/**
* 2022/3/23
*/
public class Manager extends Employee{
private String level; // 级别
public Manager(String name, String address, String ID, double wages, int age, String level) {
super(name, address, ID, wages, age);
this.level = level;
}
public void add() {
double d = super.getWages();
super.setWages(d*1.1); // 涨薪10%
}
@Override
public void add(String position){ // 实现抽象方法
double d = super.getWages();
super.setWages(d*1.2); // 涨薪20%
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
}
创建测试类:
/**
* 2022/3/23
*/
public class Demo {
public static void main(String[] args) {
Manager yuanGong = new Manager("小王","公司","100",5000,5 ,"员工");
Manager jingLi = new Manager("小张","公司","001",10000,10,"经理");
yuanGong.add(); // 调用方法
jingLi.add(jingLi.getLevel()); // 调用方法,放入级别
zhang(yuanGong);
System.out.println("------------");
zhang(jingLi);
}
public static void zhang(Manager z){
System.out.println(z.getName() + "在公司担任的职位是" +z.getLevel() +",工号为:" +z.getID());
System.out.println("工龄" + z.getAge() + "年,在公司辛勤工作,公司决定鼓励,涨薪为:" + z.getWages());
}
}