//演示類
public class Demo {
public static void main(String[] args) {
Employee emp; //抽象類對象
IPromotable prog; //接口對象
emp = new Intern("張三其", 3000, 3);
emp.print();
System.out.println();
prog = new Programmer("張三其", 5400, 30);
((Employee)prog).print();
prog.promote();
System.out.println();
prog = new Manager("張三其", 8000, "李師煊");
((Employee)prog).print();
prog.promote();
System.out.println();
}
}
//抽象雇員基類
abstract class Employee{
protected String name; //姓名
protected int salary; //年薪
abstract void print();
}
//晉升接口
interface IPromotable{
void promote();
}
//優秀員工接口
interface IGoodEmployee{
void promote();
}
//實習生類
class Intern extends Employee{
protected int periodOfInternship; //實習期
public Intern(String name, int salary, int periodOfInternship){
this.name = name;
this.salary = salary;
this.periodOfInternship = periodOfInternship;
}
@Override
public void print() {
System.out.println("實習生信息:");
System.out.println("姓名:" + this.name);
System.out.println("年薪:" + this.salary);
System.out.println("實習期(月):" + this.periodOfInternship);
}
}
//程序員類
class Programmer extends Employee implements IPromotable{
protected int averageOT; //平均加班時間
public Programmer(String name, int salary, int averageOT){
this.name = name;
this.salary = salary;
this.averageOT = averageOT;
}
@Override
public void promote() {
System.out.println("您當前的職務是程序員,即將晉升為經理!");
}
@Override
public void print() {
System.out.println("程序員信息:");
System.out.println("姓名:" + this.name);
System.out.println("年薪:" + this.salary);
System.out.println("平均加班時間(小時/月):" + this.averageOT);
}
}
//經理類
class Manager extends Employee implements IGoodEmployee, IPromotable{
protected String secretaryName; //助理姓名
public Manager(String name, int salary, String secretaryName){
this.name = name;
this.salary = salary;
this.secretaryName = secretaryName;
}
@Override
public void promote() {
System.out.println("您已經是經理了,不能馬上獲得晉升!");
}
@Override
public void print() {
System.out.println("經理信息:");
System.out.println("姓名:" + this.name);
System.out.println("年薪:" + this.salary);
System.out.println("助理姓名:" + this.secretaryName);
}
}