1. 程式人生 > >PHP面向物件(OOP):抽象方法和抽象類(abstract)

PHP面向物件(OOP):抽象方法和抽象類(abstract)

在OOP語言中,一個類可以有一個或多個子類,而每個類都有至少一個公有方法做為外部程式碼訪問其的介面。而抽象方法就是為了方便繼承而引入的,我們先來看一下抽象類和抽象方法的定義再說明它的用途。

什麼是抽象方法?我們在類裡面定義的沒有方法體的方法就是抽象方法,所謂的沒有方法體指的是,在方法宣告的時候沒有大括號以及其中的內容,而是直接在宣告時在方法名後加上分號結束,另外在宣告抽象方法時還要加一個關鍵字“abstract”來修飾;

abstract function fun1();
abstract function fun2();

上例是就是“abstract”修飾的沒有方法體的抽象方法“fun1()”和“fun2()”,不要忘記抽象方法後面還要有一個分號;那麼什麼是抽象類呢?只要一個類裡面有一個方法是抽象方法,那麼這個類就要定義為抽象類

,抽象類也要使用“abstract”關鍵字來修飾;在抽象類裡面可以有不是抽象的方法和成員屬性,但只要有一個方法是抽象的方法,這個類就必須宣告為抽象類,使用”abstract”來修飾。

複製程式碼

abstract class Demo
{

    var $test;

    abstract function fun1();
    abstract function fun2();

    function fun3(){
        ...
    }
}

複製程式碼

上例中定義了一個抽象類“Demo”使用了”abstract”來修飾, 在這個類裡面定義了一個成員屬性“$test”,和兩個抽象方法“fun1”和“fun2”,還有一個非抽象的方法fun3();那麼抽象類我們怎麼使用呢?最重要的一點就是抽象類不能產生例項物件

, 所以也不能直接使用,前面我們多次提到過類不能直接使用,我們使用的是通過類例項化出來的物件,那麼抽象類不能產生例項物件我們宣告抽象類有什麼用呢?我 們是將抽象方法是做為子類過載的模板使用的,定義抽象類就相當於定義了一種規範,這種規範要求子類去遵守,子類繼承抽象類之後,把抽象類裡面的抽象方法按 照子類的需要實現。子類必須把父類中的抽象方法全部都實現,否則子類中還存在抽象方法,那麼子類還是抽象類,還是不能例項化類;為什麼我們非要從抽象類中繼承呢?因為有的時候我們要實現一些功能就必須從抽象類中繼承,否則這些功能你就實現不了,如果繼承了抽象類,就要實現類其中的抽象方法;

複製程式碼

<?
abstract class Demo
{
    var $test;

    abstract function fun1();
    abstract function fun2();

    function fun3() {
        ...
    }
}

$demo=new Demo(); //抽象類不能產生例項物件,所以這樣做是錯的,例項化物件交給子類

class Test extends Demo
{
    function fun1() {
        ...
    }

    function fun2() {
        ...
    }
}

$test = new Test(); //子類可以例項化物件,因為實現了父類中所有抽象方法
?>

複製程式碼

相關推薦

day26 面向物件的常用方法 的使用

1. 面向物件中的常用方法 ***** isinstance() # 判斷某個物件是不是某個類的例項 # 判斷stu物件是不是Student類的例項 是不是子類 issubclass() class Person: pass class Student(Person): pass stu = Stud

深入PHP面向物件、模式與實踐——模式原則1

組合 模式的啟示 通過以靈活的方式來組合物件,元件能在執行時被定義。《設計模式》將此提煉出一個原則:組合優於繼承。 組合與繼承 繼承是應對變化的環境及上下文設計的有效方式,然而它會限制靈活性,尤其是當類承擔了過多的責任的時候。 問題 以下圖

設計模式(Design Patterns)-可複用面向物件軟體的基礎 01:簡介Abstract

一、概述 設計模式(Design Pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、程式碼設計經驗的總結。 使用設計模式是為了可重用程式碼、讓程式碼更容易被他人理解、保證程式碼可靠性。 毫無疑問,設計模式於己於他人與系統都是多贏的,可以使程式碼真正工程化。 設

PHP面向物件(OOP):抽象方法抽象abstract

在OOP語言中,一個類可以有一個或多個子類,而每個類都有至少一個公有方法做為外部程式碼訪問其的介面。而抽象方法就是為了方便繼承而引入的,我們先來看一下抽象類和抽象方法的定義再說明它的用途。 什麼是抽象方法?我們在類裡面定義的沒有方法體的方法就是抽象方法,所謂的沒有方法體

5.4-全棧Java筆記:面向對象進階之對象的轉型 | FINAL關鍵字 |抽象方法抽象

java對象的轉型(casting)引用變量只能調用它編譯類型的方法,不能調用它運行類型的方法。這時,我們就需要進行類型的強制轉換!【示例1】對象的轉型public class TestCasting { public static void main(String[] args) {

PHP面向物件(OOP):.staticconst關鍵字的使用self::

static關鍵字是在類中描述成員屬性和成員方法是靜態的;靜態的成員好 處在哪裡呢?前面我們聲明瞭“Person”的人類,在“Person”這個類裡如果我們加上一個“人所屬國家”的屬性,這樣用“Person”這個類實 例化出幾百個或者更多個例項物件,每個物件裡面就都有“所屬國

抽象方法抽象知識總結

重寫 所有 抽象方法 知識 實例 可見 實現 virt 需要 抽象方法:沒有定義方法體的方法,抽象方法必須在子類中重寫。 抽象類:含有抽象方法的類為抽象類,抽象類中可以有普通方法,抽象類不能實例化,可以被繼承。 抽象方法也是虛方法,但不需要關鍵字virtual。 抽象類中

java abstract 關鍵字 抽象方法抽象的使用詳解

java abstract 關鍵字 抽象類 抽象方法 的使用詳解 1.關鍵字 2.抽象類 3.抽象方法 4.abstract不能用來修飾屬性、構造器、private、final、static 1.關鍵字

重走Java基礎:面向物件-抽象abstract

抽象類,什麼是抽象類? 1. 抽象類的產生 當編寫一個類時,我們往往會為該類定義一些方法,這些方法是用來描述該類的功能具體實現方式,那麼這些方法都有具體的方法體。 但是有的時候,某個父類只是知道子類應該包含怎麼樣的方法,但是無法準確知道子類如何實現這些方法。比如一個圖形類應該有一

Java-抽象方法抽象

abstract關鍵字 由abstract修飾的方法為抽象方法,抽象方法只有方法的定義,誒歐方法體實現,用一個分號結尾; 一個類如果包含抽象方法,該類應該用abstract關鍵字宣告為抽象

PHP面向物件中魔術方法使用

一: PHP為我們提供了一系列用__開頭的函式,這些函式無需自己動手呼叫,會在何時的時機自動呼叫,稱這類函式為魔術函式。 如: function __construct( ) {} 在new一個新物件時自動呼叫此函式。 二: 1:建構函式__cons

php面向物件(OOP)—介面(interface)

PHP與大多數面向物件程式語言一樣,不支援多重繼承。也就是說每個類只能繼承一個父類。為了解決這個問題,PHP引入了介面,介面的思想是指定了一個實現了該介面的類必須實現的一系列方法。介面是一種特殊的抽象類,抽象類又是一種特殊的類,所以介面也是一種特殊的類,為 什麼說介面是一

PHP 進階之 抽象abstract、接口interface、Trait特征

包含 中一 man ont 就是 類型 link array ike 抽象類 PHP 5 支持抽象類和抽象方法。定義為抽象的類不能被實例化。 抽象方法只能在抽象類中,抽象類中可以包含非抽象方法 被定義為抽象的方法只是聲明了其調用方式(參數),不能定義其具體的功能實現 繼承

PHP面向物件開發,關於呼叫父構造器的問題

今天進行PHP開發時,發現子類的構造方法的引數必須與父類的構造方法引數一樣,否則會在網頁上進行警告,影響網頁的美觀。 目前的解決方法有三個: 1.通過調整PHP的錯誤提示等級。 2.使用父類的建構函式,子類的屬性單獨賦值。 3.解決方法如下: class a{ var $

java面向物件高階分層例項_測試main方法所在的

package bdqn.studentSys; /** * main類 * @author Administrator * */ import java.util.*; import bdqn.studentSys.Dao.StudentDao; import

class抽象abstract, 介面interface的關係區別

抽象類: 抽象類不能被例項化 抽象類可以不包含抽象類, 但是有抽象類的方法一定是抽象類 任何子類必須重寫父類的抽象方法, 或者自己也是抽象類 抽象類中的抽象方法只是宣告,不包含

Kotlin——最詳細的抽象abstract、內部類嵌套詳解

unit 建議 git 功能 pen 情況 master 這也 html 在前面幾個章節中,詳細的介紹了Kotlin類的類別中的數據類、密封類、接口類以及枚舉類。在這個章節中會對Koltin的抽象類和內部類作出一個詳細的講解。如果對上面所提到的類的類別還不是很清晰的,請閱

面向物件【day08】:異常處理

本節內容 1、概述 2、異常梳理 3、異常梳理流程圖 4、異常大全 5、自定義異常 一、概述   異常處理是當程式出錯了,但是我們又不想讓使用者看到這個錯誤,而且我在寫程式的時候已經預料到了它可以出現這樣的錯誤,出現這樣的錯誤代表著什麼,我們可以提前處理這些個錯誤 二、異常處理 2.1 處理

vue中mixins的使用方法注意點

mixins基礎概況 vue中的解釋是這樣的,如果覺得語言枯燥的可以自行跳過嘿~ 混入 (mixins): 是一種分發 Vue 元件中可複用功能的非常靈活的方式。混入物件可以包含任意元件選項。當元件使用混入物件時,所有混入物件的選項將被混入該元件本身的選項。 怎麼用? 舉個栗子: 定義一個混入

靜態方法靜態變數總結

1.static方法是類中的一個成員方法,屬於整個類,即使不用建立任何物件也可以直接呼叫! static內部只能出現static變數和其他static方法!而且static方法中還不能使用this....等關鍵字..因為它是屬於整個類! 2.靜態方法效率上要比例項化高,靜態方法的缺點是不自動