首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 面向對象三大特性之封裝:原理、訪問權限與最佳實踐

     編輯:Java 程式設計入門

面向對象編程(OOP)核心在於「封裝、繼承、多態」。本文聚焦封裝,闡述其定義、優勢、訪問修飾符規則,並通過實例展示如何設計高內聚、低耦合的類。

什麼是封裝?

封裝是將類的內部實現細節隱藏,僅對外暴露公共介面(方法)。核心做法:

  1. 屬性私有化(private),禁止外部直接讀寫。
  2. 提供公共 Getter/Setter,在存取邏輯中加入驗證、轉換、日誌等。
  3. 隱藏實現細節,外部僅依賴介面,內部變更不影響調用者。

封裝的四大好處

  • 隱藏實現,降低認知負擔,調用者只需知道「怎麼用」。
  • 保持介面穩定,內部重構不破壞外部代碼。
  • 區分私有/公共屬性,精細控制存取權限。
  • 降低耦合,提升可維護性與擴展性。

訪問權限修飾符詳解

修飾符同類同包子類(異包)所有類適用場景
private✓✗✗✗內部實現細節,絕不對外暴露
default (package-private)✓✓✗✗包內協作類,不想對外公開
protected✓✓✓✗給子類繼承/覆寫,或包內協作
public✓✓✓✓對外公共 API、介面

核心原則:優先用 private,再考慮 protected/default,最後才 public。違例會導致封裝破壞(如直接 public 欄位)。

實戰範例:Student 類封裝

public class Student {
    private String name;
    private String age;

    // 僅內部使用的輔助方法
    private String handleName(String name) { return "I'm " + name; }
    private String handleAge(String age) { return age + " 歲"; }

    // 公共介面
    public String getName() { return name; }
    public void setName(String name) { this.name = handleName(name); }

    public String getAge() { return age; }
    public void setAge(String age) { this.age = handleAge(age); }
}

調用端:

public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        student.setName("byhieg");
        student.setAge("23");
        System.out.println(student.getName() + " " + student.getAge());
        // 輸出:I'm byhieg 23 歲
    }
}

設計要點

  • name/age 為 private,外部不可直接讀寫。
  • 內部邏輯 handleName/handleAge 為 private,外部不可調用,保證顯示格式只能內部控制。
  • Getter/Setter 為 public,提供唯一存取通道,未來需修改格式(如加密、驗證)只需改內部實現,調用端零修改。

常見誤區與建議

  1. 所有屬性都生成 Getter/Setter → 僅暴露業務真正需要的屬性,不可變對象只提供 Getter。
  2. Setter 直接賦值無驗證 → 應在 Setter 中加入非空、範圍、格式校驗,拋出 IllegalArgumentException。
  3. 將集合/數組直接返回 → 返回副本或不可變視圖,防止外部修改內部狀態。

總結

封裝是 OOP 基石,透過訪問權限與介面設計,實現「高內聚、低耦合」。良好的封裝讓系統易讀、易維護、易擴展,是從「能跑」邁向「好維護」的關鍵一步。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved