Java接口介紹

2018-06-29 17:16 更新

接口Interface

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)