天天看點

Java多繼承方法(名)沖突和成員内部類、局部内部類、靜态内部類、匿名内部類

java内部類

    ①内部類是在一個java類體内,再定義一個類,即外部類的内部再定義一個類(相對的)。

     ②内部類分為四類:

         成員内部類、局部内部類、靜态内部類、匿名内部類

     ③内部類作為外部類的一個成員,并依附于外部類而存在。包括:成員内部類、局部内部類、匿名内部類

     ④内部類可以由private、public、protected、default通路修飾符和static修飾;

     ⑤而外部類,即和public類平行的,隻能有default修飾(空白修飾符),總之,由public和default通路修飾符修飾。

     ⑥ 内部類和外部類的執行個體變量可以共存,

          内部類中通路執行個體變量:this.屬性。eg: this.age

          内部類中通路外部類的執行個體變量:外部類名.this.屬性。innerclass.this.id

      ⑦内部類是一個編譯時的概念,編譯成功,就會成為完全不同的兩個類  eg:innerclass.class和innerclass$classx1.class

      ⑧内部類裡不能定義靜态的屬性和方法;

          注:此處内部類(除靜态内部類外);

         加載類時,靜态預設在記憶體中執行個體化的并存放。即可以直接調用不用手動執行個體化使用。内部類的執行個體化依賴于外部類,内部類不能直接被執行個體化,必須在外部類執行個體化後再執行個體化。

         外部類public class或class是不能預設加載的,隻有調用new關鍵字手動執行個體化時才配置設定記憶體。

         是以内部類不能定義靜态的屬性和方法。

所有代碼編譯圖為:

Java多繼承方法(名)沖突和成員内部類、局部内部類、靜态内部類、匿名内部類

成員内部類:

測試類:

輸出結果:

inner1

成員内部類:4466*5555

外部類内部調用成員内部類:完畢!

編譯後的class位元組碼反編譯為:

innerclass類:

成員内部類classx1:

局部内部類:

此後外部類代碼,不變,替換内部類:

測試代碼:

此後,main中的代碼,其他省略:

代碼輸出為:

inner2

局部内部類預設構造方法在drawic中new時候執行

局部内部類對象調用getn2開始

局部内部類:lalala&4466$333

編譯後的innerclass類:

此後,隻替換變化代碼,其他不變:

編譯後的classx2類:

靜态内部類

輸出為:

inner3

靜态内部類:169shasha

編譯後:

class3類:

匿名内部類:

in接口:

ac抽象類:

 inner4

匿名内部類:我實作了接口in的方法

inner5

匿名内部類:我擴充了抽象類ac的方法4466

接口實作匿名内部類:

抽象類實作類(匿名内部類)

注:最尾提供全部代碼

java多繼承方法(名)沖突

當類或接口或(抽象)父類,三個不同組合,發生方法(名)沖突的時候,此時必須使用内部類來解決。

匿名内部類、成員内部類

接口配合内部類,可以實作真正完全的多繼承。

接口in:

抽象類ac:

實作類innerclasssolvemultipleforacorin:

外部類實作接口in中的extend()方法1

成員内部類實作抽象父類ac中的extend()方法2

匿名内部類實作抽象父類ac中的extend()方法3

實作内部類,全部代碼:

内部類innerclass代碼:

測試test代碼:

inner4