php抽象類和介面的區別

2021-10-03 07:02:24 字數 1378 閱讀 3508

抽象類和介面的關係:抽象類是一種特殊的類,介面是一種特殊的抽象類

抽象類

什麼是抽象方法:如果乙個類中的方法,沒有方法體的方法就是抽象方法(就是乙個方法沒有使用{},而直接使用分號結束)

例:abstract function test();        //抽象方法

如果乙個方法是抽象方法,就必須要用abstract修飾

什麼是抽象類:

1.如果乙個類中有乙個方法是抽象的,那這個類就是抽象類

2.如果乙個類是抽象類,那麼這個類必須要使用 abstract 修飾

3.抽象類是一種特殊的類,就是因為類中至少有乙個抽象方法,其他不變,也可以在抽象類中宣告成員屬性,常量,非抽象的方法

4.抽象類不能例項化物件

抽象類的作用:要想使用抽象類,就必須使用乙個類繼承抽象類,而且要想使用這個子類,也就是讓子類可以建立物件,子類就不能是抽象類了,子類可以重寫父類的方法(給抽象方法加上方法體)。

抽象方法中的方法沒有方法體,子類必須實現這個方法(父類中沒寫具體的實現,但子類必須有這個方法名),就是在定義一些規範,讓子類按照這個規範實現自己的功能

目的:就是要將你自己寫的程式模組加入到原來寫好的程式中去(別人寫好的程式,不能等你開發完乙個小模組,根據你的小模組繼續向下開發)

介面

介面和抽象類的作用是一樣的

因為php是單繼承的,如果使用抽象類,子類實現完抽象類就不能繼承其他的類了,如果既想實現一些規範,又想繼承及其他的類,那麼就要使用介面

介面和抽象類的對比:

1.作用相同,都不能建立物件,都需要子類去實現

2.介面的宣告用(inte***ce)和抽象類(abstract)不一樣

3.介面被實現的方法不一樣

4.介面中的所有方法都必須是抽象方法(不能使用 abstract)

5.介面中的成員屬性只能宣告常量不能宣告變數

6.介面中的成員訪問許可權都必須是 public ,抽象類中的許可權是 public,protected

7.使用乙個類繼承介面要用 implements 而不是用 extends,可以使用抽象類去實現介面中的部分方法,如果想讓子類可以建立物件,則必須實現介面中所有抽象方法,如果子類是重寫父介面中的抽象方法,則使用implements (類---介面,抽象類---介面  都使用 implements,介面---介面 extends)

8.乙個類可以實現多個介面(按多個規範去開發子類),使用逗號分隔多個介面名稱,乙個類在繼承乙個類的同時可以去實現乙個或多個介面(先繼承再實現)

使用implements的兩個目的

1.可以實現多個介面,而extends只能繼承乙個

2.沒有使用extends,可以去繼承乙個類,所以兩個可以同時使用

抽象類和介面的區別

要結合來使用,從而互補長短。接下來先說說抽象類和介面的區別。區別一,兩者表達的概念不一樣。抽象類是一類事物的高度聚合,那麼對於繼承抽象類的子類來說,對於抽象類來說,屬於 是 的關係 而介面是定義行為規範,因此對於實現介面的子類來說,相對於介面來說,是 行為需要按照介面來完成 這些聽起來有些虛,舉個例...

抽象類和介面的區別

net提供了介面,這個不同於class或者struct的型別定義。介面有些情況,看似和抽象類一樣,因此有些人認為在.net可以完全用介面來替換抽象類。其實不然,介面和抽象類各有長處和缺陷,因此往往在應用當中,兩者要結合來使用,從而互補長短。接下來先說說抽象類和介面的區別。區別一,兩者表達的概念不一樣...

抽象類和介面的區別

net提供了介面,這個不同於class或者struct的型別定義。介面有些情況,看似和抽象類一樣,因此有些人認為在.net可以完全用介面來替換抽象類。其實不然,介面和抽象類各有長處和缺陷,因此往往在應用當中,兩者要結合來使用,從而互補長短。接下來先說說抽象類和介面的區別。區別一,兩者表達的概念不一樣...