複製鏈接
請複製以下鏈接發送給好友

Final

(編程語言關鍵字)

鎖定
Final英文意思是:最終的; 決定性的; 不可更改的; 決賽; 結局; 期末考試。也是多種編程語言的關鍵字或保留字。
英語單詞
final
漢語翻譯
最後的,決定性的;決賽,結局
詞    性
形容詞、名詞
複數形式
finals(n.)

目錄

Final信息介紹

C++11標準提供了説明符final。 [1]  需要注意的是,C++11中的final不是關鍵字,而是説明符,這意味着您可以將它(在不引起混淆的情況下)將它作為標識符使用(為了兼容以前的代碼)。類似的説明符還有override。Java和AS3.0關鍵字final有“這是無法改變的”或者“終態的”含義,它可以修飾非抽象類、非抽象類成員方法和變量。你可能出於兩種理解而需要阻止改變:設計或效率。

FinalC++中

C++11標準提供了説明符final,用於阻止派生類覆蓋特定的虛方法。或是阻止一個類成為基類
語法1:class Someclass final {...};
語法2:class Someclass {...type somefun(arg-list) final;...};
舉例如下:
#include<iostream>
classX
{
private:
charc;
public:
X():c('B'){}
X(chararg):c(arg){}
virtualvoidput()constfinal{std::cout<<c<<std::endl;}
//final修飾了put()函數,使其不能被覆蓋
//...
};

classY:publicX
{
private:
inti;
public:
Y():i(0){}
Y(intarg):i(arg){}
//這裏不能有voidput();了,因為有了final説明符
//...
};

classZfinal//final修飾Z類,您不能從Z類派生出一個類,而只能用於創建對象
{
private:
doubled;
public:
Z():d(0.0){}
Z(doublearg):d(arg){}
voidput()const{std::cout<<d<<std::endl;}
//...
};

intmain()
{
usingnamespacestd;
charfinal='X';//可以這麼做
Xx(final);
x.put();//輸出X
Yy;
y.put();//輸出B
Zz(3.14159);
z.put();//輸出3.14159
return0;
}

FinalJava中

1、final類
final類不能被繼承,因此final類的成員方法沒有機會被覆蓋,默認都是final的。在設計類時候,如果這個類不需要有子類,類的實現細節不允許改變,並且確信這個類不會再被擴展,那麼就設計為final類。 final方法不能被子類的方法覆蓋,但可以被繼承。
2、final方法
如果一個類不允許其子類覆蓋某個方法,則可以把這個方法聲明為final方法。
使用final方法的原因有二:
第一、把方法鎖定,防止任何繼承類修改它的意義和實現。
第二、高效。編譯器在遇到調用final方法時候會轉入內嵌機制,大大提高執行效率。
3、final變量(常量)
用final修飾的成員變量表示常量,只能被賦值一次,賦值後值無法改變!
final修飾的變量有三種:靜態變量、實例變量和局部變量,分別表示三種類型的常量。
從下面的例子中可以看出,一旦給final變量初值後,值就不能再改變了。
另外,final變量定義的時候,可以先聲明,而不給初值,這種變量也稱為final空白,無論什麼情況,編譯器都確保空白final在使用之前必須被初始化。但是,final空白在final關鍵字final的使用上提供了更大的靈活性,為此,一個類中的final數據成員就可以實現依對象而有所不同,卻有保持其恆定不變的特徵。
4、final參數
當函數參數為final類型時,你可以讀取使用該參數,但是無法改變該參數的值。
注:父類的private成員方法是不能被子類方法覆蓋的,因此private類型的方法默認是final類型的。
final不能用於修飾構造方法。
示例:
public void f1(final int i){ } //i是final類型的,值不允許改變的.
參考資料
  • 1.    Stephen Prata.C++ Primer Plus 第6版:人民郵電出版社,2012年