第5章 抽象類與介面
抽象類:只有方法名,而沒有方法體的類,就稱之為抽象類.
作用:當父類只是知道子類應該幹什麼,但是不知道子類該如何去實現這些方法,這種時候就應該使用抽象類和抽象方法,在子類中再去具體實現抽象方法.
語法:
abstract class 類名{ //抽象類需要用abstract修飾符來修飾 public abstract 返回值型別 方法名(引數); //抽象方法也需要用到abstract方法來修飾 }//要使用抽象類的時候直接extends繼承即可
特點:1、抽象類和抽象方法都需要被abstract修飾,並且抽象方法一定要定義在抽象類中.
2、抽象類不能直接建立物件,因為呼叫抽象方法沒有意義
3、只有覆蓋重寫了抽象類中的所有抽象方法後,其子類才可以建立物件,否則該子類還是一個抽象類
4、抽象類中可以不定義抽象方法(所以包含抽象方法的類一定是抽象類,抽象類也可以定義非抽象方法)
介面
介面是比抽象類更抽象的"類".介面只描述所應該具備的方法,並沒有具體實現.
具體的實現由抽象類的實現類(子類)來實現.
優點:將功能的定義與實現分離,優化了程式設計.
語法:
public interface 介面名 { 修飾符 返回值 抽象方法1(); 修飾符 返回值 抽象方法2(); 修飾符 返回值 抽象方法3(); } class 實現類名 implements 介面名 { 抽象方法1實現(){}; 抽象方法2實現(){}; 抽象方法3實現(){}; }
實現類的抽象方法的修飾符和返回型別、引數必須和介面定義的一樣.
繼承父類同時實現介面:
一個子類可以同時繼承一個父類和實現一個介面
當一個子類繼承了一個父類,同時他又需要其他的
功能的時候,介面就派上用場了.
語法:
class Dog extends 子類 implements 介面 { //介面實現 }
介面的多繼承:
類之間可以通過繼承來產生關係,但只支援多層繼承,而不支援多繼承.而介面和類使用implements(實現)來產生關係
同樣,介面之間也可以使用extends進行繼承,而且一個介面還能同時繼承多個介面
語法:
interface 介面名 extends 介面名1,介面名2,介面名3{//子介面不需要去實現父類介面的方法 }//父介面之間用逗號隔開
課後習題
1、介面和抽象類的異同是什麼?
1、介面中只有抽象方法,而抽象類中不一定有或只有抽象方法,還能有普通方法和成員變數.
2、抽象類和介面都不能用來例項化物件.
3、介面可以多繼承,而抽象類不行
4、一個類可以實現多個介面,但只能繼承一個抽象類
5、抽象類可以有建構函式,而介面不能.
2、介面和父類的異同是什麼?
1、介面中只能有抽象方法(只有方法描述而沒方法實現),而父類中不能擁有抽象方法,可以擁有普通方法(需要有實現)和成員變數.
2、介面不能例項化物件,而父類可以.
3、一個子類可以實現多個介面,但只能繼承一個父類.
4、介面使用implements關鍵字實現,父類使用extends來繼承