如果說整個類都是final(在它的定義前冠以final關鍵字),就表明自己不希望從這個類繼承,或者不允許其他任何人采取這種操作。換言之,出於這樣或那樣的原因,我們的類肯定不需要進行任何改變;或者出於安全方面的理由,我們不希望進行子類化(子類處理)。
除此以外,我們或許還考慮到執行效率的問題,並想確保涉及這個類各對象的所有行動都要盡可能地有效。如下所示:
//: Jurassic.java // Making an entire class final class SmallBrain {} final class Dinosaur { int i = 7; int j = 1; SmallBrain x = new SmallBrain(); void f() {} } //! class Further extends Dinosaur {} // error: Cannot extend final class 'Dinosaur' public class Jurassic { public static void main(String[] args) { Dinosaur n = new Dinosaur(); n.f(); n.i = 40; n.j++; } } ///:~
注意數據成員既可以是final,也可以不是,取決於我們具體選擇。應用於final的規則同樣適用於數據成員,無論類是否被定義成final。將類定義成final後,結果只是禁止進行繼承——沒有更多的限制。然而,由於它禁止了繼承,所以一個final類中的所有方法都默認為final。因為此時再也無法覆蓋它們。所以與我們將一個方法明確聲明為final一樣,編譯器此時有相同的效率選擇。
可為final類內的一個方法添加final指示符,但這樣做沒有任何意義。