- 第 152 篇 -
Date: 2025 - 11- 16
Author: 鄭龍浩(仟墨)

【Java 基礎】

文章目錄

  • 【Java 基礎】
  • 5 面向對象 - 實體類
  • 5.1 定義
  • 5.2 實體類的要求:
  • 5.2 實體類的設計理念:職責分離

5 面向對象 - 實體類

5.1 定義

一種特殊的類,主要用於存儲數據

5.2 實體類的要求:

滿足以下要求

  • 必須提供無參構造器
  • 必須提供無參構造器
  • 必須提供無參構造器
  • 有參構造器可選(推薦提供)

5.2 實體類的設計理念:職責分離

實體類體現了"存儲與處理相分離"的設計思想:

1 傳統做法:一個類同時負責存儲數據和處理數據

// 不推薦:存儲和處理混在一起
public class Student {
    private String name;
    
    public void printInfo() { /* 打印對象信息 */ }
    public void getName() { /* 獲取對象姓名 */ }
    public void setName() { /* 設置對象姓名 */ }
    // ... 其他業務邏輯
}

2 實體類做法:分為兩個獨立的類

Student2.java

====== Student2.java ======
package com.zhenglonghao.opp.student2;
/***
 * Author: 鄭龍浩
 * Date: 2025-11-16
 * Description: 負責存儲學生信息的類 + getter 和 setter 方法
 */
public class Student2 {
    // 1 私有成員
    private String name;
    private int age;
    private double Chinese;
    private double Math;

    // 2 構造器
    public Student2() {} // 無參構造器
    public Student2(String name) {} // 有參構造器
    public Student2(String name, int age) {} // 有參構造器

    // 3 Getter 和 Setter 方法
    public String getName() {return name;} // 獲取 姓名
    public void setName(String name) {this.name = name;} // 設置 姓名

    public int getAge() {return age;} // 獲取 年齡
    public void setAge(int age) {this.age = age;} // 設置 年齡

    public double getChinese() {return Chinese;} // 獲取 中文成績
    public void setChinese(double Chinese) {this.Chinese = Chinese;} // 設置 中文成績

    public double getMath() {return Math;} // 獲取 數學成績
    public void setMath(double Math) {this.Math = Math;} // 設置 數學成績
}

StudentOperator2.java

====== StudentOperator.java ======
package com.zhenglonghao.opp.student2;

/***
 * Author: 鄭龍浩
 * Date: 2025-11-16
 * Description: 負責處理學生信息的類
  */
public class Student2Operator {
    Student2 sta = new Student2(); // 創建對象
    // 構造器存儲傳來的信息
    public Student2Operator(Student2 sta) {
        this.sta = sta;
    }

    // 公有方法
    // 打印所有信息
    public void printInfo() {
        System.out.println("姓名:" + sta.getName() + ",年齡:" + sta.getAge() +
                ",語文:" + sta.getChinese() + ",數學" + sta.getMath());
    }
    // 打印平均成績
    public void scoreAvg() {
        double avg = (sta.getChinese() + sta.getMath()) / 2;
        System.out.println("平均分:" + avg);
    }
}

**Test2.java **

// ====== Test.java ======
package com.zhenglonghao.opp.student2;

/***
 * Author: 鄭龍浩
 * Date: 2025-11-16
 * Description: 聯繫封裝思想 + 實體類(將數據和數據處理放到兩個類中)
 */

public class Test2 {
    public static void main(String[] args) {
        // 對象s1
        Student2 s1 = new Student2(); // 無參構造器創建對象
        // 存入數據
        s1.setName("ZZZ"); // 輸入姓名
        s1.setAge(18); // 輸入年齡
        s1.setChinese(80);
        s1.setMath(90);
        System.out.println("對象s1信息:\n");
        // 創建一個操作對象,將s1傳入,用於處理s1的信息
        Student2Operator operator = new Student2Operator(s1);
        operator.printInfo(); // 打印信息
        operator.scoreAvg(); // 打印平均成績
        System.out.println("\n------------------------\n");

        // 對象s2
        Student2 s2 = new Student2("ZLH", 18); // 創建對象時直接傳參進去
        System.out.println("對象s2信息:\n");
        // 創建一個操作對象,將s2傳入,用於處理s2的信息
        Student2Operator operator2 = new Student2Operator(s2);
        operator2.printInfo(); // 輸出信息
        operator2.scoreAvg(); // 輸出平均成績
    }
}

執行Test2.java,打印

對象s1信息:

姓名:ZZZ,年齡:18,語文:80.0,數學90.0
平均分:85.0

------------------------

對象s2信息:

姓名:null,年齡:0,語文:0.0,數學0.0
平均分:0.0