###### tags: `JAVA` # 9/28 寫個建構子? ## 這是題目 * 其它類別『不能修改』empno、name、salary * 僅能在new Employee 時於建構方法中設定 empno、name、salary * 建立物件後可以利用getXXX取得 empno、name、salary * 設計一個Manager類別(繼承Employee類別) * 加個long型態的bonus(分紅),且不開放修改 * 同樣只能由建構方式中指定 * 設計一個建構方法可以同時指定empno、name、salary、bonus且要呼叫父類別的建構方法 * 覆寫getSalary,薪資為原本的salary加上bonus ``` public class Employee { private int empno; private String name; private long salary; ``` ## 寫了3支個class(Employee、Manager、InfoBuilder) ### Employee ``` package exam.e4; public class Employee { //設3個private不讓其他類別修改 private int empno; private String name; private long salary; //====以上是題目提供的====== //建構子 public Employee(int empno,String name,long salary) { this.empno=empno; this.name=name; this.salary=salary; } //設get方法讓人取得private的屬性們 //當然沒設修改用的set方法 //Alt+Shift+S R public int getEmpno() { return empno; } public String getName() { return name; } public long getSalary() { return salary; } } ``` ### Manager ``` package exam.e4; //Manager繼承Employee public class Manager extends Employee{ //多加一個private且long型態的bonus private long bonus; //可同時輸入4參數的建構子 public Manager(int empno,String name,long salary,long bonus) { //private不給用this.的屬性及方法 //所以用super產生子類別物件 //子建構子呼叫父類別建構子 super(empno, name, salary); //Manager的bonus自己加 this.bonus=bonus; } @Override //覆寫getSalary public long getSalary() { //用super讓子類別呼叫覆類別的方法,依題目需要加上分紅 return super.getSalary()+bonus; } //多寫個顯示分紅多少 public long getBonus() { return bonus; } } ``` ### InfoBuilder ``` package exam.e4; public class InfoBuilder { public static void main(String[] args) { //3個參數修飾子皆設為private //建構後僅可用get方法取得 Employee emp= new Employee(1,"小明",123L); System.out.printf( "員工編號:%d , 姓名:%s , 薪資:%d%n", emp.getEmpno(),emp.getName(),emp.getSalary()); // Manager man= new Manager(2,"大美",234L,321L); System.out.printf( "主管編號:%d , 姓名:%s , 薪資:%d (其中%d為分紅)%n", //class Manager的getSalary已Override為底薪加分紅 man.getEmpno(),man.getName(),man.getSalary(),man.getBonus()); } } ```