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

Java final 關鍵字深度解析(二):物件引用與方法修飾

     編輯:J2SE

核心觀察

透過實際測試發現,final 修飾的物件參考雖不能指向新物件,但物件內部屬性值卻可以改變。嘗試將 final A a 重新指向另一個 A 實例(a = b;)會導致編譯錯誤,這證明了「引用不可變,物件內容可變」。

final 修飾方法的規則

  • final 方法:不能被子類覆寫,但可以被繼承並直接調用。
  • private 方法:僅在父類內可見,子類中定義同名方法不構成覆寫,而是獨立的新方法。
  • private final 方法:結合兩者特性,同樣不可被覆寫且對子類不可見。

代碼示例:基類 A

package zy.pro.jbd.testbase;

public class A {
    int t = 10;
    public A() {}
    public void setT(int t) { this.t = t; }
    public int getT() { return this.t; }

    public final void finalA() {
        System.out.println(" final method finalA");
    }
    private void privateA() {
        System.out.println("private method privateA");
    }
    private final void privateFinalA() {
        System.out.println("private final method privateFinalA");
    }
}

子類 AA 的嘗試

package zy.pro.jbd.testbase;

public class AA extends A {
    public AA() {}
    /*
     * 錯誤嘗試:覆寫 final 方法
     * public final void finalA() { ... } // 編譯錯誤
     */
    private void privateA() {
        System.out.println("private method privateA in class AA");
    }
    private final void privateFinalA() {
        System.out.println("private final method privateFinalA in class AA");
    }
}

子類 AA 中定義同名 private 方法完全合法,因為父類的 private 方法對子類不可見,不存在覆寫關係。

總結

  1. final 修飾基本類型 → 值不可變。
  2. final 修飾物件引用 → 引用不可變,物件內容可變。
  3. final 修飾方法 → 不可覆寫,可繼承;private 方法不可見,子類可同名定義。

本文來自編程入門網:原文連結

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