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

Java 封裝核心:private 變數如何透過公共 getter/setter 跨包、跨類存取?

     編輯:程式設計綜合問答

Java 封裝機制中,private 修飾的成員變數(包含實例變數與靜態變數)無法被外部類別直接存取。但若提供 public 的 getter/setter 方法,即可實現跨包、跨類的受控存取。本文說明其運作原理與設計重點。

核心規則

無論變數以何種修飾符(private、protected、default、public)宣告,只要對應的 getter/setter 方法為 public,其他套件、類別即可透過這些方法存取該變數。

程式碼示範

package com.example.model;

public class User {
    // 私有實例變數
    private String name;
    // 私有靜態變數
    private static int count = 0;

    // 公共 getter/setter
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public static int getCount() {
        return count;
    }

    public static void setCount(int count) {
        User.count = count;
    }
}
package com.other.package;

import com.example.model.User;

public class Test {
    public static void main(String[] args) {
        User u = new User();
        u.setName("Alice");        // 跨包設定 private 實例變數
        System.out.println(u.getName()); // 跨包讀取

        User.setCount(10);         // 跨包設定 private 靜態變數
        System.out.println(User.getCount()); // 跨包讀取
    }
}

設計要點

  • 封裝目的:隱藏內部實作細節,僅暴露必要操作介面,便於未來加入驗證邏輯、日誌記錄或延遲初始化。
  • 靜態變數同理:static 變數屬於類別,其 getter/setter 同樣建議宣告為 static,透過類別名稱呼叫。
  • 不可變物件:若變數僅需在建構時設定,後續不應修改,請僅提供 getter、移除 setter,並將欄位宣告為 final。
  • JavaBean 規範:遵循命名慣例(getXxx/setXxx、isXxx for boolean),以便框架(如 Spring、Jackson)自動識別與操作。

常見誤區

「private 變數完全無法被外部存取」——錯誤。private 僅限制「直接存取」,透過公共方法間接存取是標準做法。

掌握此機制,即能靈活運用封裝,打造安全且可維護的 Java 類別。

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