接口 匿名對象 內部類

接口

  • 概念
    • 比抽象類更抽象的類
    • 只描述所應具備的方法,並沒有實現
    • 將功能定義與實現實現分離,優化了程序設計
    • 接口是功能的集合
    • 接口的方法都是public abstract方法
    • 接口的成員變量都是public final static變量
    • 類 實現 接口,使用implements關鍵字
    • 子類必須重寫父類接口所有的方法,否則只能抽象類
    • 接口不能實例化
    • 接口:多繼承 ,即接口可以繼承多個接口
    • 接口子類:多實現,即子類可以實現多個接口
    • 多個類可以實現同一個接口,一個類可以實現愛你多個接口
  • 接口思想

    • 接口的出現擴展了功能
    • 接口其實是暴露出來的規則
    • 接口的出現降低了耦合性,即設備與設備之間出現瞭解耦
  • 接口與抽象類

    • 相同點:

      • 都位於繼承的頂端,用於被其他類實現或者繼承
      • 不能實例化
      • 包含抽象方法,子類必須重寫這些方法
    • 區別:

      • 抽象類可以包含非抽象方法,而接口只能有抽象方法
      • 一個類只能繼承一個直接父類,但是可以實現多個接口

匿名對象

  • 概念

    • 在創建對象時,只有創建對象的語句,卻沒有把對象地址賦值給某個變量
  • 特點

    • 沒有變量名
    • 只能使用一次
    • 可以作爲方法接收的參數 方法返回值使用

內部類

  • 概念

    • 將類寫在其他類的內部,可以寫在其他類的成員位置和局部位置
    • 內部類可以自由訪問外部類的成員變量
    • 如果內部類是靜態的,就不能訪問外部類的靜態變量
    • 成員內部類
      • 外部類名。內部類名 變量名 = new 外部類名()。內部類名();
      • 成員內部類中不能存在任何static的變量和方法
      • 成員內部類是依附於外部類的,只有先創建了外部類才能創建內部類
      • 成員內部類可以無條件訪問外部類的所有成員變量和成員方法
      • 外部類要訪問內部類的屬性和方法,必須先創建內部類對象
      • 內部類破壞了良好的代碼結構,唯一的好處是不用創建外部類對象,內部類對象就可以任意訪問外部類的成員變量
      • 內部類中沒有同名成員變量時,內部類會直接訪問外部類的成員變量;有同名成員變量時,直接訪問的是內部類的變量,若要使用外部類的變量,需要加this.屬性名
    • 局部內部類

      • 外部類方法中:new 內部類。方法();
      • 在外部類中調用此方法,會創建內部類對象
      • 如果此時我們需要往外部類的方法中傳入參數,需要用final修飾,沒有特殊含義,只是一種形式
      • 內部類中只能訪問外部類方法中定義的final類型的局部變量,可以任意訪問外部類的成員變量
        • 主要解決編譯問題
        • 因爲外部類中的局部變量是隨方法存放在內存棧中的,方法結束這些局部變量就消失
        • 而局部內部類跟其他類一樣,是在內存堆中的,不會隨方法結束而立馬消失
        • 出現一種問題:局部變量銷燬了,而使用這些局部變量的局部內部類卻依然在
        • 所以纔要求局部內部類使用的局部變量爲final修飾的,這樣會在內部類中拷貝一份該值,不會出現編譯問題
    • 靜態內部類

      • 使用static修飾成員內部類
      • 只能訪問外部類的靜態屬性和靜態方法
      • 使用外部資源,需要實例化外部類對象
      • 創建時可以直接new出來對象
    • 私有內部類
      • 可以用private修飾內部類,這樣只能在外部類內部創建內部類
  • 內部類的實際使用–匿名內部類

    • 使用內部類的原因:
      • 適當java的多繼承更加完整
      • 方便將存在一定邏輯關係的類組織在一起,又可以對外界隱藏
      • 方便編寫事件驅動程序
      • 方便編寫線程代碼
    • 在類的內部, 將內部類的定義與創建放到一起完成,這種沒有名字的類稱爲匿名內部類
    • 匿名內部類可以繼承或實現一個接口,也只能是一個
    • 不能定義構造器,也不能new創建實例,也只是用一次.定義 構造,第一次使用一次完成.
    • -
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章