国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

關(guān)于抽象類和接口的初步理解

Julylovin / 965人閱讀

摘要:關(guān)于抽象類和接口的初步理解什么是抽象類抽象類是指在前加了關(guān)鍵字且存在抽象方法在類方法關(guān)鍵字前加了關(guān)鍵字的類。抽象類不能被直接實(shí)例化。抽象類中只定義或部分實(shí)現(xiàn)子類需要的方法。抽象類提供了具體實(shí)現(xiàn)的標(biāo)準(zhǔn),而接口則是純粹的模板。

關(guān)于抽象類和接口的初步理解 什么是抽象類

抽象類是指在 class 前加了 abstract 關(guān)鍵字且存在抽象方法(在類方法 function 關(guān)鍵字前加了 abstract 關(guān)鍵字)的類。

抽象類不能被直接實(shí)例化。抽象類中只定義(或部分實(shí)現(xiàn))子類需要的方法。子類可以通過繼承抽象類并通過實(shí)現(xiàn)抽象類中的所有抽象方法,使抽象類具體化。

如果子類需要實(shí)例化,前提是它實(shí)現(xiàn)了抽象類中的所有抽象方法。如果子類沒有全部實(shí)現(xiàn)抽象類中的所有抽象方法,那么該子類也是一個抽象類,必須在 class 前面加上 abstract 關(guān)鍵字,并且不能被實(shí)例化。
引用鏈接

接口(Interface)—— 定義行為

抽象類(Abstract Class) —— 實(shí)現(xiàn)行為

具體類(class)——執(zhí)行行為
引用鏈接

抽象類就是一個類的服務(wù)提供商,擁有眾多服務(wù),你不用必須用,當(dāng)需要的時候你來用就可以,如果你覺得不提供服務(wù)不滿意,你還可以自己來做。

抽象方法是必須實(shí)現(xiàn)的方法。就象動物都要呼吸。但是魚用鰓呼吸,豬用肺呼吸。
動物類要有呼吸方法。怎么呼吸就是子類的事了。

引用鏈接

為什么要使用抽象類

按照我目前的知識理解:

保持程序的一致性

抽象類限制了實(shí)現(xiàn)的方法,也是為了保持一致性

增加代碼重用性,例如一些公共類不需要實(shí)現(xiàn),只需要調(diào)用里面的方法就可以了。

現(xiàn)在有很多討論和建議提倡用interface代替abstract類,兩者從理論上可以做一般性的混用,但是在實(shí)際應(yīng)用中,他們還是有一定區(qū)別的。抽象類一般作為公共的父類為子類的擴(kuò)展提供基礎(chǔ),這里的擴(kuò)展包括了屬性上和行為上的。而接口一般來說不考慮屬性,只考慮方法,使得子類可以自由的填補(bǔ)或者擴(kuò)展接口所定義的方法,就像JAVA王子所說的事件中的適配器就是一個很好的應(yīng)用。

用一個簡單的例子,比如說一個教師,我們把它作為一個抽象類,有自己的屬性,比如說年齡,教育程度,教師編號等等,而教師也是分很多種類的,我們就可以繼承教師類而擴(kuò)展特有的種類屬性,而普遍屬性已經(jīng)直接繼承了下來。

而接口呢~還是拿教師做例子,教師的行為很多,除了和普通人相同的以外,還有職業(yè)相關(guān)的行為,比如改考卷,講課等等,我們把這些行為定義成無body的方 法,作為一個集合,它是一個interface。而教師張三李四的各自行為特點(diǎn)又有不同,那么他們就可以擴(kuò)展自己的行為body。從這點(diǎn)意義上來說,interface偏重于行為。

引用鏈接

怎樣使用抽象類
color = $color;
        }
        
        public function getColor() {  //只是為了演示需要的一個方法
            return $this->color;
        }
        
        abstract public function getArea();  //構(gòu)造方法是為了限制代碼,對于繼承這個構(gòu)造類的子類,必須限制擁有這個構(gòu)造方法,主要為了保持代碼一致性。
    }
    
    class Square extends Shape{
        protected  $length = 4;
        public function getArea() {
            return pow($this->$length, 2);
        }
    }
    
    class Circle extends Shape{ //這里因?yàn)闆]有構(gòu)造方法getArea,所以代碼允許會報(bào)錯的。
        
    }
    
    $shape = new Square();
    var_dump($shape);
?>
接口和抽象類

抽象類不能被直接實(shí)例化,抽象類中只定義子類需要的方法,子類可以繼承并且通過實(shí)現(xiàn)其中的抽象方法,使抽象類具體化。例如一個名為media的類,他是用于描述各種公開出版的共同性質(zhì),因?yàn)閙edia不表示真實(shí)的實(shí)體,而是一些相似實(shí)體的泛化表示,所以不實(shí)例化,這樣就需要聲明為抽象類,然后再由各種的派生的Media類繼承此抽象類

抽象類的每個子類都必須實(shí)現(xiàn)抽象類中的所有抽象方法,或者把他們自身也聲明為抽象方法。

擴(kuò)展類不僅僅負(fù)責(zé)簡單實(shí)現(xiàn)抽象類的方法,還必須重新聲明方法,新的方法不能比抽象方法的訪問控制更嚴(yán)格,新的實(shí)現(xiàn)方法的參數(shù)個數(shù)應(yīng)該和抽象方法的參數(shù)個數(shù)一樣。

接口定義了實(shí)現(xiàn)某種服務(wù)的一般規(guī)范,聲明了必須的函數(shù)和常量,但是不指定如何實(shí)現(xiàn)。關(guān)鍵是要建立必須實(shí)現(xiàn)的一組一般原則,只有滿足了這些原則才能說實(shí)現(xiàn)了這個接口。

抽象類提供了具體實(shí)現(xiàn)的標(biāo)準(zhǔn),而接口則是純粹的模板。接口只能定義功能而不包含實(shí)現(xiàn)的內(nèi)容。

任何實(shí)現(xiàn)接口的類都要實(shí)現(xiàn)接口中所定義的所有方法,否則類必須聲明為abstract。

實(shí)現(xiàn)接口的類接受他的繼承的類以及實(shí)現(xiàn)的接口的類型。

什么時候用接口,什么時候用抽象類

如果要創(chuàng)建一個模型,這個模型將由一些緊密相關(guān)的對象引用,就可以采用抽象類,如果要創(chuàng)建將由一些不想關(guān)的對象采用的功能,應(yīng)該用接口。

如果必須從多個來源繼承行為,就是用接口。

如果知道所有類都會共享一個公共的行為實(shí)現(xiàn),就使用抽象類,并在其中實(shí)現(xiàn)行為。接口無法實(shí)現(xiàn)。

一個類只能extends一個父類,但可以貫徹多個接口。

接口作用一:

接口類就是一個類的領(lǐng)導(dǎo)者,指明方向,子類必須完成它指定方法。

當(dāng)有很多人一起開發(fā)一個項(xiàng)目時,可能都會去調(diào)用別人寫的一些類,那你就會問,我怎么知道他的某個功能的實(shí)現(xiàn)方法是怎么命名的呢,這個時候php接口類就起到作用了,當(dāng)我們定義了一個接口類時,它里面的方式是下面的子類必須實(shí)現(xiàn)的,比如

interface Shop
{
public function buy($gid);
public function sell($gid);
public function view($gid);
}
class BaseShop implements Shop
{
    public function buy($gid)
    {
        echo "你購買了ID為 :" . $gid . "的商品";
    }

    public function sell($gid)
    {
        echo "你購賣ID為 :" . $gid . "的商品";
    }

    public function view($gid)
    {
        echo "你瀏覽了ID為 :" . $gid . "的商品";
    }
}
接口作用二:

有時候,我們需要設(shè)計(jì)一個物品,比如shape,這個shape有不同的形狀,有不同的顏色,可作不同的運(yùn)動,等等。當(dāng)然我們可以把這些都放在一個類里面,但這樣,如前面說的,只是過程編程,不是OO編程。你會說,像上面例子一樣,做一個抽象類,然后在子類里實(shí)現(xiàn)所有的功能。好象不錯,進(jìn)步了。這樣子類里面要實(shí)現(xiàn)形狀,顏色,運(yùn)動等功能,OK嗎?記住,OO里面還有一條原則,為了最大程度的做到代碼重用,一個類里最好只實(shí)現(xiàn)一個功能,也就是說,一個類做形狀,一個類做顏色,一個類做運(yùn)動 。這樣如果其他的類要用到顏色的功能時,我們就可以重用這個顏色類,同理,這樣我們可以很容易的重用運(yùn)動類,形狀類,等等。

但這樣問題出來了,現(xiàn)在我們要用到上面所有的功能,但又分散在三個類里面,怎么辦?這時我們就要用到抽象類和接口了。選定一個跟shape關(guān)聯(lián)最大的一項(xiàng)–形狀,把它做成抽象類, 其他兩樣,把它們做成接口,然后在子類里面extends一個抽象類,再implements兩個接口就行了。如:

class Square extends Shape implements 顏色, 運(yùn)動, ... {
...
}
抽象類作用一:

抽象類就是一個類的服務(wù)提供商,擁有眾多服務(wù),你不用必須用,當(dāng)需要的時候你來用就可以,如果你覺得不提供服務(wù)不滿意,你還可以自己來做。

這里是一個例子,想上面一樣我定義了一個商店類,抽所了它所有像的部分,買(buy),賣(sell),看(view),并且抽象類里都實(shí)現(xiàn)了這些方法,那么繼承它的子類就自動獲得了這些方法,子類就做它自己獨(dú)特的東西,減少代碼的重復(fù),提高復(fù)用性。

abstract class BaseShop
{
    public function buy($gid)
    {
        echo "你購買了ID為 :" . $gid . "的商品";
    }

    public function sell($gid)
    {
        echo "你購賣ID為 :" . $gid . "的商品";
    }

    public function view($gid)
    {
        echo "你瀏覽了ID為 :" . $gid . "的商品";
    }
}

class BallShop extends BaseShop
{
    var $itme_id = null;

    public function __construct()
    {
        $this->itme_id = 2314;
    }

    public function open()
    {
        $this->sell($this->itme_id);
    }
}
抽象類作用二:

在抽象類里面設(shè)置抽象方法

在oo設(shè)計(jì)時,會把一些通用的方法放在一個類里,但考慮到子類繼承時的差異性,又不能把它事先實(shí)現(xiàn),就只好用到這個抽象類或接口了。這里很清楚的顯示了在抽象類里,我們貫徹了設(shè)原用到點(diǎn)setCenter()的方法,這樣,當(dāng)子類繼承它時,就不用再重復(fù)寫這個設(shè)原點(diǎn)的方法了。那么為什么draw的方法要設(shè)定成抽象方法呢?這是因?yàn)椴煌淖宇愐貌煌膶?shí)現(xiàn)方法。

abstract class Shape
{
    function setCenter($x, $y)
    {
        $this->x = $x;
        $this->y = $y;
    }

    abstract function draw();

    protected $x, $y;
}

參考:http://chengxudaren.com/index.php?act=article&op=detail&a_id=152

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/22503.html

相關(guān)文章

  • [零基礎(chǔ)學(xué)python]關(guān)于初步認(rèn)識

    摘要:反對者在某些領(lǐng)域?qū)Υ擞枰苑裾J(rèn)。下面再引用一段來自維基百科中關(guān)于的歷史。類的更嚴(yán)格的定義是由某種特定的元數(shù)據(jù)所組成的內(nèi)聚的包。類還可以有運(yùn)行時表示形式元對象,它為操作與類相關(guān)的元數(shù)據(jù)提供了運(yùn)行時支持。 在開始部分,請看官非常非常耐心地閱讀下面幾個枯燥的術(shù)語解釋,本來這不符合本教程的風(fēng)格,但是,請看官諒解,因?yàn)榱形粚硪欢ㄒ喿x枯燥的東西的。這些枯燥的屬于解釋,均來自維基百科。 1、問題...

    王巖威 評論0 收藏0
  • 7. 初步理解面向?qū)ο?【連載 7】

    摘要:是一種典型的面向?qū)ο缶幊陶Z言。這篇文章主要是來初步理解一下面向?qū)ο蟮乃季S為下面的內(nèi)容先給一個基礎(chǔ)。針對面向?qū)ο缶幊痰母鄡?nèi)容,會在后面的文章里面詳細(xì)解釋。他們都稱之為對象。之后,我們再用編程語言,把這種映射編寫出來,就是的面向?qū)ο缶幊汤病? showImg(https://segmentfault.com/img/remote/1460000012983458?w=900&h=500);...

    keelii 評論0 收藏0
  • 關(guān)于接口簡單理解

    摘要:第五章接口接口概述常見的貓狗案例貓和狗它們僅僅提供一些基本功能。如果一個類繼承了某個抽象類,它的子類則一定是抽象類的種類,而接口實(shí)現(xiàn)則是有或者沒有具備或者不具備的關(guān)系,比如狗是否能鉆火圈,能則可以實(shí)現(xiàn)這個接口,不能就不實(shí)現(xiàn)這個接口。 第五章 接口 5.1 接口概述 常見的貓狗案例 貓和狗它們僅僅提供一些基本功能。 但有一些不是動物本身就具備的,比如:貓鉆火圈,狗跳高等功能 是在后面的培...

    NoraXie 評論0 收藏0
  • PHP經(jīng)驗(yàn)總結(jié) - 聊聊面向?qū)ο?/b>

    摘要:例如汽車這個名詞可以理解為汽車的總類,但這輛寶馬汽車則是一個具體的汽車對象。當(dāng)在類成員方法內(nèi)部調(diào)用的時候,可以使用偽變量調(diào)用當(dāng)前對象的屬性。在面向?qū)ο笾袆t被稱之為方法。 簡述 現(xiàn)在大伙都在講面向?qū)ο缶幊蹋俏覀円驳孟日抑粋€對象是不?不然怎么面向?qū)ο螅吭趺淳幊蹋?--- 笑話一則,但是理不虧,要搞P面向?qū)ο缶幊蹋覀兤鸫a要先搞懂對象(還有類)是什么?只有了解它,理解它,你才能駕馭它。...

    lpjustdoit 評論0 收藏0
  • 多維度分析:抽象類和接口區(qū)別

    摘要:本文中,作者通過多個方面深入剖析抽象類和接口的區(qū)別,并結(jié)合經(jīng)驗(yàn)供讀者借鑒學(xué)習(xí),本文系工程師編譯整理。在開發(fā)人員崗位面試時,是否了解抽象類和接口之間的基本區(qū)別是一個很重要的考量因素。 【編者按】本文作者是Sebastian Malaca,是面向?qū)ο缶幊痰目駸嵴撸粩嗌罨芯空麧嵈a和高代碼質(zhì)量。本文中,作者通過多個方面深入剖析抽象類和接口的區(qū)別,并結(jié)合經(jīng)驗(yàn)供讀者借鑒學(xué)習(xí),本文系 OneA...

    chengtao1633 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<