若你沒有需要繼承某class,只希望N個class都要求有某些功能,就先宣告一個interface,讓各class去實作它!
筆記: 抽象與介面
抽象(abstract) :
(1)讓子class一定要去覆寫的方法。
(2)抽象類別是不能產生物件。
(3)抽象類別的關鍵字 = abstract;使用extends繼承。
(4)abstract關鍵字只能用在類別與方法,用在屬性則沒有意義
(5)抽象方法不需要寫方法的內容,實作是交給繼承此抽象類別的子類
別來做。
(6)使用建構子是因為其他屬性還是需要做初始化的動作。
(1)讓子class一定要去覆寫的方法。
(2)抽象類別是不能產生物件。
(3)抽象類別的關鍵字 = abstract;使用extends繼承。
(4)abstract關鍵字只能用在類別與方法,用在屬性則沒有意義
(5)抽象方法不需要寫方法的內容,實作是交給繼承此抽象類別的子類
別來做。
(6)使用建構子是因為其他屬性還是需要做初始化的動作。
介面(interface) :
(1)為一種標準、規範,只要節合此介面的規範就能和這個介面溝通。
(2)沒有建構函數、成員變數必須指定初值
(3)關鍵字 = interface;使用implements繼承。
(4)只有方法宣告,沒有實作。(如同抽象,但因介面內的方法全為抽
象方法,所以不用加abstract關鍵字。)
ex: public interface face
{
public void sex();
}
(5)繼承宣告的方式:
public class human extends sex implements face
(6)介面不需要有建構子的存在(因只是做規格、功用的定義宣告,且
因介面只有類別常數(使用final,但不用寫,因為介面中的變數會
自動轉)
(7)利用介面來做多重繼承。(介面繼承介面也是用extends)
(8)可利用instanceof來判斷某個類別是否實作了某個介面。
(9)Interface使用時,必須使用裡面所有的方法,不然必須宣告為
abstract類別
=====================================
比較:
(1) interface的方法沒有「實作」,abstract能有abstract方法,但
也沒有「實作」
(2) interface與abstract類別都不能直接用來建立物件實體,必須由
一個標準class來繼承他,實作沒有「實作部分」的方法,然後再
以此建立物件實體。
(3) interface 沒有建構子,abstract有建構子
(4) interface 不允許其內任何方法有「實作」,abstract類別允許其
內非abstract方法有實作。
(5) interface 沒有內建的super與this變數,abstract有。
(6) interface 的成員變數一定都是final;abstract類別的成員變數比
照一般的class。
(7) interface 所有成員的封裝等級都是public;abstract則可加任何
封裝等級。