抽象類和介面的關係:抽象類是一種特殊的類,介面是一種特殊的抽象類
抽象類
什麼是抽象方法:如果乙個類中的方法,沒有方法體的方法就是抽象方法(就是乙個方法沒有使用{},而直接使用分號結束)
例: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可以完全用介面來替換抽象類。其實不然,介面和抽象類各有長處和缺陷,因此往往在應用當中,兩者要結合來使用,從而互補長短。接下來先說說抽象類和介面的區別。區別一,兩者表達的概念不一樣...