題目要求
- 抽象類別
Person:name, age, address、抽象方法 eat()、work()。
- 介面
Students(exam)、Teachers(prepareLessons)、Parents(breed)。
- 三個具體類別繼承
Person 並實作對應介面。
- 主程式建立物件、設定屬性、列印資訊。
關鍵設計要點
1. 避免欄位重複:子類別**不要**重新宣告父類別已有欄位
abstract class Person {
private String name;
private int age;
private String address;
// getter/setter
}
class Student extends Person implements Students {
// ❌ 不要再寫 private String name, age, address
private int stuNo;
private float score;
private String classRoom, schoolName;
// ...
}
2. 建構子鏈:子類別建構子呼叫 super(...)
public Student(String name, int age, String address, int stuNo, float score, String classRoom, String schoolName) {
super(name, age, address); // 初始化父類別欄位
this.stuNo = stuNo;
this.score = score;
this.classRoom = classRoom;
this.schoolName = schoolName;
}
3. 介面方法具體實作
@Override public void exam() { System.out.println("考試"); }
@Override public void eat() { System.out.println("吃飯"); }
@Override public void work() { System.out.println("工作(學習)"); }
4. printScore 邏輯修正:回傳字串而非直接列印
public String getScoreLevel(float score) { // 回傳等級字串
if (score >= 90) return "優秀";
if (score >= 80) return "優良";
if (score >= 70) return "良好";
if (score >= 60) return "合格";
return "差";
}
// 主程式呼叫
System.out.println(student.getName() + " 成績等級:" + student.getScoreLevel(student.getScore()));
5. toString 統一格式
@Override public String toString() {
return "Student{name='" + getName() + "', stuNo=" + stuNo + ", score=" + score + " ...}";
}
完整可運行主程式片段
public static void main(String[] args) {
Student s1 = new Student("張三", 16, "合肥市長江路0001號", 1, 95f, "初三三班", "合肥一中");
Student s2 = new Student("飛飛", 16, "合肥", 2, 61f, "初三三班", "合肥一中");
Student s3 = new Student("曉婷", 16, "合肥", 3, 55f, "初三三班", "合肥一中");
System.out.println(s1.getName() + "(" + s1.getStuNo() + "):" + s1.getScoreLevel(s1.getScore()));
System.out.println(s2.getName() + "(" + s2.getStuNo() + "):" + s2.getScoreLevel(s2.getScore()));
System.out.println(s3.getName() + "(" + s3.getStuNo() + "):" + s3.getScoreLevel(s3.getScore()));
Teacher t = new Teacher("李四", 40, "合肥長江西路0002號", 2000.0, "合肥一中");
System.out.println(t);
Parent p = new Parent("王五", 41, "合肥長江西路0001號");
System.out.println(p);
}
常見扣分點
- 子類別重複宣告父類別欄位 → 記憶體浪費、資料不一致。
- 未呼叫
super() 導致父類別欄位未初始化。
printScore 用 void 直接列印,無法靈活組合輸出。
Teacher.bestStudent 參數寫法錯誤(原代碼 bestStudent(getScore(),...) 不合法)。