PHP類執行個體教程:abstract類和abstract方法

來源:互聯網
上載者:User
可以使用abstract來修飾一個類或者方法。

用abstract修飾的類表示這個類是一個抽象類別,用abstract修飾的方法表示這個方法是一個抽象方法。

抽象類別不能被執行個體化。

抽象方法是只有方法聲明,而沒有方法的實現內容。

abstract 抽象類別

可以使用abstract來修飾一個類。

用abstract修飾的類表示這個類是一個抽象類別。

抽象類別不能被執行個體化。

這是一個簡單抽象的方法,如果它被直接執行個體化,系統會報錯。

Php代碼


下面例子的 NormalUser 繼承自 User類,就可以被執行個體化了。

Php代碼


單獨設定一個抽象類別是沒有意義的,只有有了抽象方法,抽象類別才有了血肉。下面介紹抽象方法。

abstract 抽象方法

用abstract修飾的類表示這個方法是一個抽象方法。

抽象方法,只有方法的聲明部分,沒有方法體。

抽象方法沒有 {} ,而採用 ; 結束。

一個類中,只要有一個抽象方法,這個類必須被聲明為抽象類別。

抽象方法在子類中必須被重寫。

下面是一個抽象類別,其中有兩個抽象方法,分別是 setSal() 和 getSal()。用來取回 $sal 員工的工資。

Php代碼


既然User類不能被直接繼承,我們寫一個NormalUser類繼承自User類。當我們寫成如下代碼時,系統會報錯。 這個錯誤告訴我們,在 User類中有兩個抽象方法,我們必須在子類中重寫這兩個方法。

Php代碼



下面例子,重寫了這兩個方法,雖然方法體裡面 {} 的內容是空的,也算重寫了這個方法。注意看重寫方法的參數名稱,這裡只要參數數量一致就可以,不要求參數的名稱必須一致。

Php代碼


下面19-21行,三種寫重寫的方式都會報錯。

19行,缺少參數。

20行,參數又多了。

21行,參數類型不對。(這種寫法在以後章節介紹)

一個類中,如果有一個抽象方法,這個類必須被聲明為抽象類別。

下面這個類不是抽象類別,其中定義了一個抽象方法,會報錯。

Php代碼


抽象類別繼承抽象類別

抽象類別繼承另外一個抽象類別時,不用重寫其中的抽象方法。

抽象類別中,不能重寫抽象父類的抽象方法。

這樣的用法,可以理解為對抽象類別的擴充

下面的例子,示範了一個抽象類別繼承自另外一個抽象類別時,不需要重寫其中的抽象方法。

Php代碼



抽象類別在被繼承後,其中的抽象方法不能被重寫。

如果發生重寫,系統會報錯。

Php代碼


抽象類別繼承抽象類別,目的對抽象類別的擴充。

Php代碼



在PHP5.1中,抽象類別中支援靜態抽象方法。下面這個例子,看到靜態抽象方法可以聲明。實現這個方法時,必須是靜態方法。

靜態抽象方法

在PHP5.1中,抽象類別中支援靜態抽象方法。下面這個例子,看到靜態抽象方法可以聲明。實現這個方法時,必須是靜態方法。

Php代碼

  //這裡的抽象方法好像沒有問題
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.