1. 程式人生 > >接口和內部類

接口和內部類

作用域 pow 通過 acc 匿名內部類 查詢 構造函數 回調 繼承關系

接口的定義:接口不是類,是對類的一組需求描述。

如何實現接口:1.將類聲明為實現給定的接口(implements)

       2.對接口中的所有方法進行定義(實現)

接口的特性:1)接口變量必須引用實現了接口的類對象

      2)可以使用 instanceof 檢查一個對象是否實現了某個接口

      3)與可以建立類的繼承關系一樣,接口也可以被擴展

        例如:public interface Powerd extends Moveable

      4)接口中不能包含 實例域 和 靜態方法,但可以包含常量。

      5)接口中的方法 自動被設置為 public,接口中的域 將自動被設置為 public static final

接口和抽象類的異同:抽象類只能擴展於一個類,即一個類只能繼承於一個類;然而,一個類可以實現多個接口。

-----------------------------------------------------------------------------------------------------------------------------------------

內部類:定義在另一個類中的類。

使用內部類的原因:

  1)內部類 方法 可以訪問 該類 定義所在作用域中的數據,包括私有的數據。

  2)內部類可以對同一個包中的其他類隱藏起來,換句話說,同一個包中的其他類 是 看不到 內部類

的。

  3)當想要定義一個回調函數且不想編寫大量代碼時,使用匿名內部類比較便捷。

創建內部類,並不代表:包含 內部類的外圍類的對象,都有一個內部類的對象實例域。而是 內部類的對象 包含一個 指向了創建它的外部類對象的隱式引用

通過查詢編譯後的代碼,java 編譯器會將 內部類編譯成 一個類文件,名稱組成: 外圍類$內部類.class。在類文件中,會多一個 final 的實例域 this$0。而在外部類的類文件中會多一個 access$0 靜態方法。

1)當某個對象只在某個方法中創建一次,那麽就可以定義局部內部類

  1)創建局部內部類,不能使用 public 或 private 訪問修飾符 進行聲明

  2)作用域 只現定於 聲明此類所在的塊中

  3)相比於其他內部類:局部內部類 可以訪問 局部變量(必須被聲明為 final

2)當只創建某個類的對象時,那麽就可以考慮創建 匿名內部類

  超類的寫法: new SuperType(construction param){//匿名內部類的參數,只能通過父類傳遞進去

          innser class methods and data

        }  

  接口的寫法:new Interface (){//匿名內部類的實現接口,不能帶有參數,因為接口沒有構造函數。

          innser class methods and data

        }

3)當需要把一個類隱藏在另外一個類的內部時,並不需要內部類引用外部類對象,這個時候就可以通過靜態內部類來實現。

  

接口和內部類