Java接口介紹

2018-06-29 17:16 更新

接口Interface

  1. 接口中的成員變量默認都是public、static、final類型的,必須被顯式初始化
  2. 接口中的方法默認都是public、abstract類型的。
  3. 接口中只能包含public、static、final類型的成員變量和public、abstract類型的成員方法。
  4. 接口沒有構(gòu)造方法,不能被實例化,在接口中定義構(gòu)造方法是非法的。
  5. 一個接口不能實現(xiàn)另一個接口,但它可以繼承多個其他接口。 interface C extends A, B{} // A和B都是接口
  6. 當類實現(xiàn)某個接口時,它必須實現(xiàn)接口中所有的抽象方法,否則這個類必須被定義為抽象類。
  7. 接口中沒有方法體 訪問控制修飾符 四種訪問級別:public、protected、默認、private private只能在同一個類中訪問 默認,只能在同一個類,同一個包中訪問 protected,可以在統(tǒng)一各類,同一個包,子類(子類可以不在同一個包中)訪問 public,不限制訪問 類可用修飾符: abstract、public、final 構(gòu)造方法:public、protected、private 局部變量:僅僅final abstract修飾符
  8. 抽象類中可以沒有抽象方法,但包含了抽象方法的類必須被定義為抽象類。
  9. 沒有抽象構(gòu)造方法,沒有抽象靜態(tài)方法。 static 和 abstract不能連用
  10. 抽象類中可以有非抽象的構(gòu)造方法,創(chuàng)建子類的實例時可能會調(diào)用這些構(gòu)造方法。
  11. 抽象類及抽象方法不能被final修飾符修飾。final和abstract 不能連用,同樣private和abstract不能連用。
  12. 抽象類不能被實例化。因為抽象類可能含有沒有方法體的抽象方法 final修飾符 final具有;不可改變的;含義,它可以修飾非抽象類,非抽象成員方法和變量
  13. 用final修飾的類不能被繼承,沒有子類。
  14. 用final修飾的方法不能被子類的方法覆蓋。
  15. 用final修飾的變量表示常量,只能被賦一次值,必須被顯式初始化。
  16. private修飾的方法默認為是final方法,因而不能被子類的方法覆蓋。 static修飾符
  17. 靜態(tài)變量在內(nèi)存中只有一個拷貝,在類的所有實例中共享。
  18. 在靜態(tài)方法中不能直接訪問實例方法和實例變量。
  19. 在靜態(tài)方法中不能使用this和super關(guān)鍵字。
  20. 靜態(tài)方法不能被abstract修飾
  21. 靜態(tài)方法和靜態(tài)變量都可以通過類名直接被訪問。
  22. 當類被加載時,靜態(tài)代碼塊只被執(zhí)行一次。類中不同的靜態(tài)代碼塊按它們在類中出現(xiàn)的順序被依次執(zhí)行 public static void main(String args[]) {} 程序入口方法,可以被final修飾。 super關(guān)鍵字
  23. 在類的構(gòu)造方法中,通過super語句調(diào)用這個類的父類的構(gòu)造方法。 在構(gòu)造方法中,super語句必須作為構(gòu)造方法的第一條語句。
  24. 在子類中訪問父類的被屏蔽的方法和屬性
  25. 只能在構(gòu)造方法或?qū)嵗椒▋?nèi)使用super關(guān)鍵字。 super關(guān)鍵字與類的特定實例相關(guān) 方法覆蓋(方法重寫)
  26. 方法的參數(shù)簽名和返回值類型必須相同,訪問控制修飾符可以不同,但是子類方法不能縮小父類方法的訪問權(quán)限。
  27. 子類方法拋出的異常必須和父類方法拋出的異常相同,或者是父類方法拋出的異常類的子類。
  28. 父類的靜態(tài)方法是不能被子類覆蓋為非靜態(tài)方法。 父類的非靜態(tài)方法不能被子類覆蓋為靜態(tài)方法。
  29. 子類可以定義與父類的靜態(tài)方法同名的靜態(tài)方法,以便在子類中隱藏父類的靜態(tài)方法。區(qū)別:運行時,JVM把靜態(tài)方法和所屬的類綁定,而把實例方法和所屬的實例綁定。
  30. 父類的私有方法不能被覆蓋
  31. 父類的非抽象方法可以被覆蓋為抽象方法 方法重(chong)載
  32. 在一個類中不允許兩個方法名相同,并且參數(shù)簽名也完全相同的方法。
  33. 類的同一種功能,可能有多種實現(xiàn),到底采用哪種實現(xiàn)方式,取決于調(diào)用者給定的參數(shù)。
  34. 對于類的方法(包括從父類中繼承的方法),如果有兩個方法的方法名相同,但參數(shù)不一致,那么可以說,一個方法是另一個方法的重載方法。 多態(tài)
  35. 對于一個引用類型的變量,Java編譯器按照它聲明的類型來處理。 Base base = new Sub(); base.subMethod(); // 編譯出錯,Base基類,Sub子類,編譯器認為base是Base類型的引用變量,Base類沒有subMethod()方法。這樣子,就必須使用強制轉(zhuǎn)換。(Sub)(base).subMethod();
  36. 對于一個引用類型的變量,運行時JVM按照它實際引用的對象來處理。 Base base = new Base(); Sub sub = (Sub)base; // 編譯通過,但是運行時拋出ClassCastException 在運行時,子類的引用類型變量可以轉(zhuǎn)換為父類的引用類型,而相反的過程卻不可以。 假定可以,即上邊兩行代碼運行正常,那么sub.subMethod(); 執(zhí)行時,JVM將找不到subMethod。sub實際引用的是Base類的實例。
  37. 在運行時環(huán)境中,通過引用類型變量來訪問所引用對象的方法和屬性時,JVM采用以下的綁定規(guī)則。 ①實例方法與引用變量實際引用的對象的方法綁定,即動態(tài)綁定。 ②靜態(tài)方法與引用變量所聲明的類型的方法綁定,即靜態(tài)綁定。 編譯階段即綁定完成。 ③成員變量(靜態(tài)變量和實例變量) 與引用類型所聲明的類型的成員變量綁定。靜態(tài)綁定。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號