在Java中,只要是被定義為final的類,也可以說是被final修飾的類,就是不能被繼承的。
因為jdk的開發(fā)者認(rèn)為,有一些最基本的類沒要必要對開發(fā)者開放,如果用戶繼承時操作有誤,很可能引入很多問題。為了防止用戶對基本類進(jìn)行相應(yīng)的擴(kuò)展,也體現(xiàn)了java設(shè)計過程中的開閉原則,最終將這些類設(shè)計成為final的。
這是final的規(guī)定:
當(dāng)你將final用于類身上時,一個final類是無法被任何人繼承的,那也就意味著此類在一個繼承樹中是一個葉子類,并且此類的設(shè)計已被認(rèn)為很完美而不需要
進(jìn)行修改或擴(kuò)展。對于final類中的成員,你可以定義其為final,也可以不是final。而對于方法,由于所屬類為final的關(guān)系,自然也就成了final型的。你也可以明確的給final
類中的方法加上一個final,但這顯然沒有意義。
java中常見的不能被繼承的類有如下:
String,
StringBuffer,
StringBuilder,
基本類型的包裝類如Double,Integer,Long
等等。
我們來看看這個String類是如何被定義的: