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