Java 中的 abstract、final、static 關鍵字

1、abstractide

一、abstract 能夠修飾類和方法(構造方法不行),分別叫作抽象類和抽象方法;spa

二、抽象類中能夠沒有抽象方法(通常無心義,抽象類中應該擁有抽象方法),而擁有抽象方法的類必須被聲明爲抽象類;對象

     繼承抽象類的子類也能夠是抽象類,這樣的抽象子類能夠對基類中的抽象方法進行重寫也能夠不進行重寫,通常不進行重寫(除非要在抽象子類內部調用這個重寫的方法,可經過這個抽象子類的非抽象子類的對象調用繼承於抽象子類中重寫的方法。有點繞啊,不過是個小技巧^_^)。抽象子類中也能再次聲明父類的抽象方法,只是這樣作沒有任何意義,正常人不會這樣作^_^);繼承

     定義的抽象類能夠不被繼承,若被繼承且該抽象類中又有抽象方法,則繼承該抽象類的非抽象子類必須重寫父類的抽象方法。固然咱們一般指望:抽象類中應該有抽象方法,抽象類應該被繼承而且其中的抽象方法必定要被非抽象的子類重寫!變量

三、抽象類不能被實例化。 抽象類的父類能夠是非抽象類,但通常狀況下,這樣的繼承關係不經常使用。權限

四、抽象方法只需聲明,無需實現(即不用寫大括號和大括號內的東西)。技巧

2、final引用

一、final 能夠修飾成員變量、局部變量、方法(構造方法不行)和類;方法

二、final 修飾的變量不能被更改!final 修飾的成員變量必定要初始化(注意:聲明成員變量時不使用final是能夠不初始化變量的,系統會給其相應類型的默認值;可以修飾局部變量的關鍵字只有 final ,不管有無 final 修飾,聲明某個局部變量時,能夠不賦值,但使用此局部變量時則必定要先將其初始化);static

三、final 修飾的方法能夠被繼承,但不能被子類重寫

四、final 修飾的類不能被繼承

3、static

一、static 能夠修飾成員變量和方法(構造方法不行);

二、被 static 修飾的變量或者方法獨立於該類的任何對象,也就是說,這些變量和方法不屬於任何一個實例對象,而是被類的實例對象所共享。

三、在類被加載的時候,就會去加載被 static 修飾的部分。被static修飾的變量或者方法是優先於對象存在的,也就是說當一個類加載完畢以後,即使沒有建立對象,也能夠用類名去訪問(固然您也能夠用具體的對象去訪問,但咱們使用 static 是但願直接用類名去訪問)。

四、static 修飾的方法能夠被繼承,但不能被子類重寫;static 不能修飾子類中須要重寫的方法(final能夠修飾)。

五、父類如有 static 修飾的方法,子類也擁有 static 修飾的一樣返回值和同名的方法時,子類的此方法將隱藏(hide)父類的靜態方法。這兩個方法不存在多態特性,具體調用哪一個方法是根據引用的類型來肯定,而不是以實際對象來肯定, 這一點和子類中定義的非父類的成員變量和沒有重寫的新方法相像。

六、在同一個類裏,靜態的上下文中(靜態方法內部)只能訪問靜態的屬性(這裏的「靜態的屬性」是指使用 static 修飾的屬性),若要訪問非靜態的屬性則須要 new 一個自身對象來訪問;非靜態上下文(非靜態方法)既能夠訪問非靜態的屬性,也能夠訪問靜態的屬性。(注:不一樣類之間屬性的訪問,要麼使用類名 . 屬性來訪問靜態的屬性,要麼使用對象引用 . 屬性來訪問全部屬性。固然,前句提到方法受到權限修飾符的限制,如 private 修飾的屬性,不一樣的類是不能經過上述方法訪問的)。

小貼士:從上可看出, abstract 不能與 static 或 final 一塊兒修飾某個方法;

             若在一個抽象父類中使用 abstract 聲明瞭一個抽象方法,而繼承的任何子類(包括抽象子類)都須要重寫這個方法,則不能使用 static 來修飾重寫的方法,但可使用 final 來修飾子類須要重寫的方法;

             static 和 final 能夠一塊兒修飾某個不須要重寫的方法。

相關文章
相關標籤/搜索