[Java] 6.3. super

super,讓物件可以透過super存取父類別(被繼承類別)的成員(建構式、屬性與方法)。

 

image/svg+xml6.3. 繼承 &super – Inheritance & super class Employee extends Person { String employeeID; int salary; void show (){ super . show (); System.out.println( " 員⼯編號是 " + employeeID ); System.out.println( " 薪資是 " + salary ); } void goToWork(){ System.out.println( " 上班去 " ); } void comeOffWork(){ System.out.println( " 下班了 " ); } } class Employee extends Person { String employeeID; int salary; void goToWork(){ System.out.println( " 上班去 " ); } void comeOffWork(){ System.out.println( " 下班了 " ); } void show (){ System.out.println( " 我的⾝份證字號是 " + super . id ); System.out.println( " 姓名是 " + super . name ); System.out.println( " 性別是 " + super . gender ); System.out.println( " 年齡是 " + super . getAge ()); System.out.println( " 員⼯編號是 " + employeeID); System.out.println( " 薪資是 " + salary); } } class Employee extends Person { String employeeID; int salary; String name ; void showNames (){ System.out.println( super . name ); System.out.println( name ); } } class Main{ public static void main( String [] args){ Employee e = new Employee (); e.name = " jack " ; e.showNames (); } } 執⾏結果 null jack J6_3_1 – Employee.java 1. 這是⼦類別,員⼯類別( Employee )。 J6_3_2 – Employee.java 1. 這是⼦類別,員⼯類別( Employee )。 2. 這是⽗類別,⼈員類別( Person )。 3. 這是即將要進⾏⾃我介紹⽅ 法( show() )的改寫動作。 4. super 指的就是⽗類別。精準的說 法是⽗類別部份的物件,原因很簡單, 類別是⽤來描述物件的,因此 super 以⽗類別的物件來看待才對。 5. 透過 super 關鍵字使⽤⾃我介紹⽅法,將⾝份證字號( id )、 姓名( name )、姓別( gender )與年齡( age )顯⽰出來。 6. 只要加上員⼯類別的員⼯編號( employeeID )與薪資 salary )屬性的資訊,就可完成整個員⼯的⾃我介紹。 2. 這是⽗類別,⼈員類別( Person )。 3. 員⼯改寫的⾃我介紹⽅法( show() )。 4. 透過 super 存取⽗類別的⾝份證字號( id )、 姓名( name )與性別屬性( gender )。 5. 透過 super 使⽤年齡取值式⽅法( getAge() )。 當然,若⼈員類別上的屬性與⽅法是私有化的( private ),這時也不可透過 super 存取這些屬性與⽅法,原因是這些⽅法在繼承時並未被繼承下來,因此 也無法使⽤ super 找出這些屬性與⽅法來使⽤。 J6_3_3 – Employee.java J6_3_3 – Main.java 1. 這是員⼯類別( Employee ),它繼承⾃⼈員類別( Person )。 2. 增加⼀個⼈員類別也有的姓名屬性( name )。這時會 遮蓋( shadow )原有的繼承⾃⼈員類別的姓名屬性。 3. 定義⼀個 showNames() ⽅法。 4. 透過 super 使⽤被遮蓋的⼈員類別的姓名屬性。 5. 直接使⽤新的姓名屬性,這個屬性即是宣告在員⼯類別上的姓名屬性。 6. 建立員⼯物件,並透過員⼯物件設定姓名為 “jack” ,接著呼叫 showNames() 查看⼈員物件上 姓名屬性與員⼯物件上姓名屬性被設定的狀況。 7. 這是 super.name 所產⽣的資訊,代表取得 被遮蓋 的⼈員類別上的姓名 屬性。其值並不是 jack 這個名字,⽽是 null ,代表著什麼也沒有的意思。 8. 這是直接使⽤姓名屬性的結果,也就是在員⼯類別上新宣告 的姓名屬性。換句話說,使⽤ super.name 或是 name 進⾏存取 時,會分別使⽤不同類別上的姓名屬性,這為姓名屬性確實存在 2 份,屬性並沒有改寫的功能存在,只有遮蓋的問題存在。 super ,存取⽗類別的屬性與⽅法 super ,存取改寫前的⾃我介紹⽅法 super ,存取 被遮蓋 的屬性

留言