1. 程式人生 > >Java:抽象類與介面

Java:抽象類與介面

程式設計中的抽象

  • 表達一種概念而非實體
  • 在一定程度上忽略細節而著眼大局(設計父類)

抽象類

  • 使用關鍵字abstract修飾
  • 抽象類的作用僅僅是表達介面,而不是具體的實現細節
  • 抽象類無法制造出物件,但可以定義變數,存放非抽象子類的物件

    抽象方法
    • 抽象類中可以存在抽象方法。抽象方法也是使用abstract關鍵字來修飾
    • 抽象的方法是不完全的,它只是一個方法簽名而完全沒有方法體
    • 存在抽象方法的類即成為抽象類
  • 他的子類必須重寫所有抽象方法,否則自身也成為一個抽象類

  • 可以定義沒有抽象內容的抽象類,防止製造該類的物件

介面

  • 介面是一種更抽象的純抽象類
  • 所有方法均為抽象方法
  • 所有變數均為public static final
  • 介面不能實現(implements)另一個介面,但它可以繼承多個其它的介面
  • 介面中的所有抽象方法為public

把類與介面分開來看,即不把介面視為一種類
- 類實現介面:實現所有抽象方法
- 介面繼承介面:表明當前類(介面)也擁有繼承來的所有抽象內容
即用於製造物件的類實現不了繼承介面的意義,只有介面繼承接口才有意義,繼承介面後重寫所有抽象方法即是實現介面,否則本身成為抽象類。(繼承或許可以用來獲得介面的類變數

介面是一種間接的多繼承

繼承中得到了父類方法的實現,繼承(實現)介面只得到方法的存在性,Java通過單繼承類,多實現介面,來達到受限制的多繼承效果

當用一個介面型別的變數管理一個實現該介面的類時,只能呼叫到介面類的方法,即是介面型別是該變數的動態型別,符合造型的概念,因此介面符合類的概念

介面用來溝通不相容的類,使之產生恰當的關係

介面是更高級別的抽象 比如體現在 介面中的變數必須為(也預設為)public static final
方法必須為public
介面不能繼承純抽象類。Java 規定介面只能繼承介面 介面存在的意義 提供更高級別的抽象 對實現方法開放 對修改關閉

2018/7/20