司法三等申論題
112年
[檢察事務官電子資訊組] 程式語言
第 一 題
📖 題組:
試就下列 Java 程式碼,回答三個問題:(30 分) (一)繪出這些程式間的類別繼承關係(class inheritance hierarchy)。 (二)於 StudentDemo 的 main()中加入一小段具多型(polymorphism)特性的程式碼。 (三)修改程式,讓 Student 繼承 Person,其中 Person 擁有 firstName 與 lastName 兩個屬性(亦即 Student 只剩 id 與 tuition 兩個屬性),請完整撰寫 Person 與 Student 兩個類別,且需完成所有相關 constructors 與 methods 的實作。
試就下列 Java 程式碼,回答三個問題:(30 分) (一)繪出這些程式間的類別繼承關係(class inheritance hierarchy)。 (二)於 StudentDemo 的 main()中加入一小段具多型(polymorphism)特性的程式碼。 (三)修改程式,讓 Student 繼承 Person,其中 Person 擁有 firstName 與 lastName 兩個屬性(亦即 Student 只剩 id 與 tuition 兩個屬性),請完整撰寫 Person 與 Student 兩個類別,且需完成所有相關 constructors 與 methods 的實作。
📝 此題為申論題,共 3 小題
小題 (一)
繪出這些程式間的類別繼承關係(class inheritance hierarchy)。
思路引導 VIP
觀察各類別程式碼宣告中的 extends 關鍵字,確認父類別與子類別的對應。找出基底類別(Student)以及繼承它的三個衍生類別,最後以樹狀圖或階層文字清楚呈現出繼承結構。
小題 (二)
於 StudentDemo 的 main()中加入一小段具多型(polymorphism)特性的程式碼。
思路引導 VIP
看到這題首先回想「多型(Polymorphism)」的核心定義:使用父類別型態的參考變數,來指向並操作不同子類別的實體(Upcasting)。在此題中,Student 為抽象父類別,最簡單的作法是建立一個 Student 型別的陣列,裡面存放 UndergraduateStudent、GraduateStudent 等子類別物件,並透過迴圈呼叫共同的方法(如 getTuition()),藉此展現執行期的動態綁定(Dynamic Binding)。
小題 (三)
修改程式,讓 Student 繼承 Person,其中 Person 擁有 firstName 與 lastName 兩個屬性(亦即 Student 只剩 id 與 tuition 兩個屬性),請完整撰寫 Person 與 Student 兩個類別,且需完成所有相關 constructors 與 methods 的實作。
思路引導 VIP
看到這題應先想到物件導向中的「繼承」與「屬性抽取(Refactoring)」。將原本在 Student 的 firstName 與 lastName 抽取至新建的父類別 Person 中,再讓 Student 使用 extends 繼承 Person,並在 Student 的建構子內利用 super() 呼叫父類別的建構子完成初始化。