Java

[Java]6.抽象(Abstract)與介面(Interface)

抽象(Abstrac)
抽象類別(Abstract Class)

假設我有一個類別 他其實只是個抽象的概念,他不應該被new出來成一個物件時,我就得要用Abstract

所以編譯器會禁止任何人產生(new)此物件的動作
而抽象方法也是一樣

而對於一個擁有 抽像方法 的 抽象類別 來說,如果他的子類別(就是extends父類別的那個)沒有實做其中的所有抽象方法,那麼這個子類別就會自動變成抽象類別,如下

abstract class Parent{ //抽象類別
    abstract void show(); //抽象方法
}
class child extends Parent{
    //沒有實做show,所以自動變成了抽象類別了
}

class grandson extends child{
    void show(){
System.out.print("我有實做抽象方法");
}

介面(Interface)

講到介面,他某種程度來說,跟類別(class)有一點點像,只是你一定要知道他們的差異,除了一個是用class開頭 一個是用Interface開頭之外。

類別是用來描述實際存在的物件(杯子、汽車、電腦),而介面通常只用來描述行為,例如會跑、會跳、會吵..

且介面中只能定義方法的型別(回傳值)跟參數型別,不可以定義方法的本體,而這些方法也就當然的會自動變成public的抽象方法。也就是開一個規格書給你,卻不講裡面該怎麼做,該怎做請繼承我然後自己實做。所以介面中的方法一定是 公開 且 抽象 不能有實作,然後你可以省略public abstract的語法,反正編譯器也知道了。

而這邊講到繼承 類別的繼承是用extends( class  aaa extends bbb) 這樣 而介面的則是用implements來“繼承”,或是你可稱做為實做該介面。(class ccc implements dddd)

而你一但implements那個介面,你就非得要完全實作介面中所有的方法。

而介面還可以多重繼承介面(extends aaa bbb) 這是class不行的

這時候你可能會開始搞混了,所以我幫你整理一下

1.介面可以多重繼承介面 用extends (extends aaa bbb)

2.類別不能多重繼承類別,只能單一繼承(extends xxx)

3.類別可以實作好幾個介面,也可以繼承一個 (class ccc extends aaa implements yy zz)

而這邊類別可以實作好幾個介面,可能就會產生繼承的衝突了,我要是實作了兩個介面,而兩個介面(aa bb)都有不同的變數(String str)怎辦,這時候變數就變成要指定變數了成aa.str bb.str

Be the First to comment.

Leave a Comment

你的電子郵件位址並不會被公開。

(若看不到驗證碼,請重新整理網頁。)