首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 繼承與介面作業:Student/Teacher/Parent 類別設計完整解析

     編輯:程式設計疑難解答

題目要求

  • 抽象類別 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(),...) 不合法)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved