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

Java 封裝機制深度解析:訪問修飾符、this 關鍵字、內部類四種形式與最佳實踐

     編輯:Java 相關知識

封裝核心三步驟

  1. 屬性 private 隱藏。
  2. 提供 public Getter/Setter 控制訪問。
  3. 在 Setter 中加入業務驗證 (合法性檢查)。

private float screen;
public float getScreen() { return screen; }
public void setScreen(float screen) {
    if (screen > 0 && screen < 100) this.screen = screen; // 驗證
}

包機制管理類命名衝突

  • package com.company.module; 對應目錄結構。
  • import com.company.module.ClassName; 或 import com.company.module.*;。
  • 核心包:java.lang (基礎)、java.util (工具/集合)、java.io (輸入輸出)。

四種訪問修飾符對比表

修飾符同類同包子類(異包)其他
private✓✗✗✗
default (無)✓✓✗✗
protected✓✓✓✗
public✓✓✓✓

this 關鍵字三大用途

  1. 區分同名屬性與參數:this.name = name;
  2. 構造器鏈調用:this(...) 必須首行。
  3. 返回當前對象引用:return this; (鏈式調用)。

內部類四種形式詳解

1. 成員內部類 (非靜態)


class Outer {
    private int x = 10;
    class Inner {
        void print() { System.out.println(Outer.this.x); } // 訪問外部類成員
    }
}
// 創建: Outer.Inner in = new Outer().new Inner();
  • 持有外部類引用 (Outer.this),可訪問外部類所有成員 (含 private)。
  • 編譯產出 Outer$Inner.class。

2. 靜態內部類 (static)


class Outer {
    static int s = 1;
    static class Nested {
        void print() { System.out.println(s); } // 僅能訪問外部類 static 成員
    }
}
// 創建: Outer.Nested n = new Outer.Nested(); // 無需外部實例
  • 無外部類引用,不佔用外部實例內存,推薦用於實現單例模式 (Holder 模式)。

3. 方法內部類 (局部內部類)


void method() {
    class Local { void doIt() {} }
    new Local().doIt(); // 僅在方法內可見
}
  • 不能有訪問修飾符/static (Java 16+ 允許 static)。
  • 可訪問方法的 final 或 effectively final 變量。

4. 匿名內部類


new Thread(new Runnable() {
    @Override public void run() { System.out.println("匿名類"); }
}).start();
// 或實現接口/繼承類的即時子類
  • 無名、單用、常用於事件監聽、線程任務、比較器。
  • Lambda (Java 8+) 可替代單抽象方法接口的匿名類。

最佳實踐清單

  1. 默認 private,按需放寬;protected 僅用於繼承設計。
  2. 內部類若無需外部引用,**務必加 static**。
  3. 匿名類邏輯超過 3 行 → 提取為具名類 (Lambda 除外)。
  4. 封裝不僅是隱藏字段,更是不變約束的維護邊界。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved