接口中的方法

接口中的方法    

|

接口Interface
1. 接口中的成員變量默認都是public、static、final類型的,必須被顯式初始化
2. 接口中的方法默認都是public、abstract類型的。
3. 接口中只能包含public、static、final類型的成員變量和public、abstract類型的成員方法。
4. 接口沒有構造方法,不能被實例化,在接口中定義構造方法是非法的。
5. 一個接口不能實現另一個接口,但它可以繼承多個其他接口。
interface C extends A, B{} // A和B都是接口
6. 當類實現某個接口時,它必須實現接口中所有的抽象方法,否則這個類必須被定義爲抽象類。
7. 接口中沒有方法體
訪問控制修飾符
四種訪問級別:public、protected、默認、private
private只能在同一個類中訪問
默認,只能在同一個類,同一個包中訪問
protected,可以在統一各類,同一個包,子類(子類可以不在同一個包中)訪問
public,不限制訪問
類可用修飾符: abstract、public、final
構造方法:public、protected、private
局部變量:僅僅final
abstract修飾符
1. 抽象類中可以沒有抽象方法,但包含了抽象方法的類必須被定義爲抽象類。
2. 沒有抽象構造方法,沒有抽象靜態方法。 static 和 abstract不能連用
3. 抽象類中可以有非抽象的構造方法,創建子類的實例時可能會調用這些構造方法。
4. 抽象類及抽象方法不能被final修飾符修飾。final和abstract 不能連用,同樣private和abstract不能連用。
5. 抽象類不能被實例化。因爲抽象類可能含有沒有方法體的抽象方法
final修飾符
final具有;不可改變的;含義,它可以修飾非抽象類,非抽象成員方法和變量
1. 用final修飾的類不能被繼承,沒有子類。
2. 用final修飾的方法不能被子類的方法覆蓋。
3. 用final修飾的變量表示常量,只能被賦一次值,必須被顯式初始化。
4. private修飾的方法默認爲是final方法,因而不能被子類的方法覆蓋。
static修飾符
1. 靜態變量在內存中只有一個拷貝,在類的所有實例中共享。
2. 在靜態方法中不能直接訪問實例方法和實例變量。
3. 在靜態方法中不能使用this和super關鍵字。
4. 靜態方法不能被abstract修飾
5. 靜態方法和靜態變量都可以通過類名直接被訪問。
6. 當類被加載時,靜態代碼塊只被執行一次。類中不同的靜態代碼塊按它們在類中出現的順序被依次執行
public static void main(String args[]) {} 程序入口方法,可以被final修飾。
super關鍵字
1. 在類的構造方法中,通過super語句調用這個類的父類的構造方法。
在構造方法中,super語句必須作爲構造方法的第一條語句。
2. 在子類中訪問父類的被屏蔽的方法和屬性
3. 只能在構造方法或實例方法內使用super關鍵字。 super關鍵字與類的特定實例相關
方法覆蓋(方法重寫)
1. 方法的參數簽名和返回值類型必須相同,訪問控制修飾符可以不同,但是子類方法不能縮小父類方法的訪問權限。
2. 子類方法拋出的異常必須和父類方法拋出的異常相同,或者是父類方法拋出的異常類的子類。
3. 父類的靜態方法是不能被子類覆蓋爲非靜態方法。
父類的非靜態方法不能被子類覆蓋爲靜態方法。
4. 子類可以定義與父類的靜態方法同名的靜態方法,以便在子類中隱藏父類的靜態方法。區別:運行時,JVM把靜態方法和所屬的類綁定,而把實例方法和所屬的實例綁定。
5. 父類的私有方法不能被覆蓋
6. 父類的非抽象方法可以被覆蓋爲抽象方法
方法重(chong)載
1. 在一個類中不允許兩個方法名相同,並且參數簽名也完全相同的方法。
2. 類的同一種功能,可能有多種實現,到底採用哪種實現方式,取決於調用者給定的參數。
3. 對於類的方法(包括從父類中繼承的方法),如果有兩個方法的方法名相同,但參數不一致,那麼可以說,一個方法是另一個方法的重載方法。
多態
1. 對於一個引用類型的變量,Java編譯器按照它聲明的類型來處理。
Base base = new Sub();
base.subMethod(); // 編譯出錯,Base基類,Sub子類,編譯器認爲base是Base類型的引用變量,Base類沒有subMethod()方法。這樣子,就必須使用強制轉換。(Sub)(base).subMethod();
2. 對於一個引用類型的變量,運行時JVM按照它實際引用的對象來處理。
Base base = new Base();
Sub sub = (Sub)base; // 編譯通過,但是運行時拋出ClassCastException
在運行時,子類的引用類型變量可以轉換爲父類的引用類型,而相反的過程卻不可以。
假定可以,即上邊兩行代碼運行正常,那麼sub.subMethod(); 執行時,JVM將找不到subMethod。sub實際引用的是Base類的實例。
3. 在運行時環境中,通過引用類型變量來訪問所引用對象的方法和屬性時,JVM採用以下的綁定規則。
①實例方法與引用變量實際引用的對象的方法綁定,即動態綁定。
②靜態方法與引用變量所聲明的類型的方法綁定,即靜態綁定。 編譯階段即綁定完成。
③成員變量(靜態變量和實例變量) 與引用類型所聲明的類型的成員變量綁定。靜態綁定。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章