C語言中文網 目錄
首頁 > Java教程 > Java類和對象 閱讀:1,363

Java final修飾符:final修飾屬性、final修飾方法及final修飾類

final 關鍵字表示對象是最終形態的,對象是不可改變的意思。final 應用于類、方法和變量時意義是不同的,但本質是一樣的:final 表示不可改變。

final 用在變量的前面表示變量的值不可以改變,此時該變量可以被稱為常量;final 用在方法的前面表示方法不可以被重寫;final 用在類的前面表示類不可以被繼承,即該類是最終形態,如常見的 java.lang.String 類。

final 修飾符使用在如下方面:

1. final 修飾類中的屬性

表示該屬性一旦被初始化便不可改變,這里不可改變的意思對基本類型來說是其值不可變,而對對象屬性來說其引用不可再變。其初始化可以在兩個地方:一是其定義處,也就是說在 final 屬性定義時直接給其賦值;二是在構造函數中。這兩個地方只能選其一,要么在定義時給值,要么在構造函數中給值,不能同時既在定義時賦值,又在構造函數中賦予另外的值。

2. final 修飾類中的方法

說明這種方法提供的功能已經滿足當前要求,不需要進行擴展,并且也不允許任何從此類繼承的類來重寫這種方法,但是繼承仍然可以繼承這個方法,也就是說可以直接使用。在聲明類中,一個 final 方法只被實現一次。

3. final 修飾類

表示該類是無法被任何其他類繼承的,意味著此類在一個繼承樹中是一個葉子類,并且此類的設計已被認為很完美而不需要進行修改或擴展。

對于 final 類中的成員,可以定義其為 final,也可以不是 final。而對于方法,由于所屬類為 final 的關系,自然也就成了 final 型。也可以明確地給 final 類中的方法加上一個 final,這顯然沒有意義。

例 1

下面創建一個示例演示 final 修飾符的具體使用。首先新建 FinalTest.java 文件,在該文件中創建 FinalTest 類,定義一個聲明為 final 的 count 屬性和一個聲明為 final 的 sum() 方法。

FinalTest 類的代碼如下:
public class FinalTest
{
    final int count=1;
    public int updateCount()
    {
        count=4;    //修改final屬性值,提示錯誤
        return count;
    }
    public final int sum()
    {
        int number=count+10;
        return number;
    }
}

創建 FinalTest 類的子類 FinalExtendTest,在該類中重寫父類 FinalTest 中的 sum() 方法,并繼承父類中的 sum() 方法。代碼如下:
public class FinalExtendTest extends FinalTest
{
    public int sum(){};    //重寫父類 FinalTest 中的 sum()方法,出錯
    int count=sum();    //繼承父類 FinalTest 中的 sum()方法
}

最后在 FinalExtend 類中新建程序主方法——main() 方法,實例化 FinalExtendTest 類并訪問該類的 count 屬性,代碼如下所示。
public static void main(String[] args)
{
    FinalExtendTest fet=new FinalExtendTest();
    System.out.println(fet.count);
}

在編譯該文件時,會出現兩處錯誤:一是代碼“count=4;”處,此處試圖給 count 變量重新賦值,會產生錯誤,因為 final 變量只能被初始化一次。第二處是代碼“public int sum(){};”,此處試圖重寫 final 修飾的方法,會出現錯誤,因為 final 修飾的方法可以被繼承但不能被任何類重寫。

將兩處的錯誤語句都注釋掉,程序運行后輸出的結果如下:
11

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo