深圳市網(wǎng)站建設(shè)公網(wǎng)絡(luò)搭建是干什么的
【案例4-6】經(jīng)理與員工工資案例(利用多態(tài)實(shí)現(xiàn))
歡迎點(diǎn)贊關(guān)注收藏
【案例介紹】
- 案例描述
某公司的人員分為員工和經(jīng)理兩種,但經(jīng)理也屬于員工中的一種,公司的人員都有自己的姓名和地址,員工和經(jīng)理都有自己的工號(hào)、工資、工齡等屬性,但經(jīng)理不同員工的是,經(jīng)理有自己在公司對(duì)應(yīng)的級(jí)別。假設(shè)每次給員工漲工資一次能漲10,經(jīng)理能漲20%。本案例要求利用多態(tài)實(shí)現(xiàn)給員工和經(jīng)理漲工資。
- 運(yùn)行結(jié)果
【案例分析】
(1)創(chuàng)建父類(lèi)Person類(lèi),在Person類(lèi)中定義name和address屬性,并定義該類(lèi)的構(gòu)造方法。
(2)創(chuàng)建抽象類(lèi)Employee類(lèi)并繼承Person類(lèi),創(chuàng)建構(gòu)造方法,在構(gòu)造方法中調(diào)用父類(lèi)的構(gòu)造方法。在Employee類(lèi)中定義員工的ID、工資wage、年齡age等屬性;在類(lèi)中定義漲工資的抽象方法add(),通過(guò)對(duì)職位的判斷來(lái)給員工或經(jīng)理漲工資。
(3)創(chuàng)建子類(lèi)Manager類(lèi)并繼承Employee類(lèi);創(chuàng)建構(gòu)造方法,在構(gòu)造方法中調(diào)用父類(lèi)的構(gòu)造方法;由于經(jīng)理有兩種身份,既是Employee又是Manager,所以Manager類(lèi)繼承Employee類(lèi),在Manager類(lèi)中定義等級(jí)屬性level,并給出level的getter和setter方法;實(shí)現(xiàn)Employee類(lèi)的add()抽象方法。
(4)創(chuàng)建測(cè)試類(lèi),對(duì)Manager進(jìn)行實(shí)例化,傳入?yún)?shù),調(diào)用漲薪方法,傳入級(jí)別level參數(shù),根據(jù)級(jí)別level輸出漲薪工資。
【案例實(shí)現(xiàn)】
Person.java
- public class Person {
- ????private String name = "";
- ????private String address = "";
- ????//定義構(gòu)造方法
- ????public Person(String name, String address){
- ????????this.name = name;
- ????????this.address = address;?????
- ????}
- }
上述代碼中,創(chuàng)建了一個(gè)父類(lèi)Person類(lèi),在Person類(lèi)中定義了name和address屬性以及Person類(lèi)的構(gòu)造方法。
Employee.java
- public abstract class? Employee extends Person {
- ????private String ID = "";
- ????private double wage = 0;
- ????private int age = 0;
- ????????public Employee(String name, String address, String ID, double
- ?wage, int age){
- ????????super(name, address);
- ????????this.ID = ID;
- ????????this.wage = wage;
- ????this.age = age;
- ????}
- ???//定義抽象方法
- ????public abstract void add(String position);
- ????//設(shè)置get/set方法
- ????public double getWage() {
- ????????return wage;
- ????}
- ????public void setWage(double wage) {
- ????????this.wage = wage;
- ????}
- }
上述代碼中,創(chuàng)建了一個(gè)Employee類(lèi)并繼承了Person類(lèi),在Employee類(lèi)中,定義了Employee類(lèi)的構(gòu)造方法,并在構(gòu)造方法中調(diào)用了父類(lèi)Person的構(gòu)造方法;定義了員工的name和wage和age屬性并提供了setter和getter方法;定義了抽象方法add()。
Manager.java
- public class Manager extends Employee{
- ????private String level = "";
- ????public Manager(String name, String address, String ID, double wage,
- int age, String level){
- ????????super(name, address, ID, wage, age);
- ????????this.level = level;
- ????}
- ????//實(shí)現(xiàn)抽象方法
- ????public void add(){
- ????????double wage = super.getWage();
- ????????super.setWage(wage*1.1);
- ????}
- public void add(String position){
- ????????double wage = super.getWage();
- ????????super.setWage(wage*1.2);
- ????}
- public String getLevel() {
- ????????return level;
- ????}
- public void setLevel(String level) {
- ????????this.level = level;
- ????}
- }
上述代碼中,創(chuàng)建了一個(gè)Manager類(lèi)并繼承了Employee類(lèi),在Manager類(lèi)中,定義了Manager類(lèi)的構(gòu)造方法,并在構(gòu)造方法中調(diào)用了父類(lèi)Employee的構(gòu)造方法;定義了員工的級(jí)別level屬性并提供了setter和getter方法;實(shí)現(xiàn)了Employee類(lèi)的抽象方法add(),并對(duì)add()方法進(jìn)行了重載。
Test.java
- public class Test {
- ????public static void main(String[] args) {
- ????????Manager normal = new Manager("wsl", "jit", "12", 1000, 2, "1");
- ???????Manager manager = new Manager("ctl", "jitt", "123", 10000, 10,
- ????????"0");
- ????????normal.add();
- ????????manager.add(manager.getLevel());
- ????????System.out.println("normal wage is:"+normal.getWage());
- ????????System.out.println("manager wage is:"+manager.getWage());
- ????}
- }
上述代碼中,創(chuàng)建了一個(gè)測(cè)試類(lèi)Test類(lèi),在類(lèi)中對(duì)Manager進(jìn)行了實(shí)例化并傳參。類(lèi)中通過(guò)調(diào)用無(wú)參的add()方法來(lái)獲取普通員工的漲薪,調(diào)用有參的add(manager.getLevel())方法來(lái)獲取經(jīng)理的漲薪。