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