摘要:一抽象方法和抽象類抽象方法一個方法如果沒有方法體沒有,直接分號結束,使用關鍵字修飾的方法,即是抽象方法抽象類如果類中有一個方法是抽象方法,則這個類是抽象類,該類使用來修飾注意抽象類中不一定必須有方法抽象類中有抽象方法抽象類不能創建對象其他方
一、抽象方法和抽象類
1.抽象方法:一個方法如果沒有方法體(沒有{},直接分號結束,使用abstrract關鍵字修飾的方法),即是抽象方法
2.抽象類:如果類中有一個方法是抽象方法,則這個類是抽象類,該類使用abstract來修飾
注意:
1.抽象類中不一定必須有方法 2.抽象類中有抽象方法 3.抽象類不能創建對象 4.其他方面與一般類完全一樣 5.抽象類必須有子類,子類將抽象類的抽象方法覆蓋,就有方法體了 6.子類必須覆蓋全部抽象方法,才能創建對象,如果只實現部分抽象方法,則子類還是抽象類
3.抽象方法的作用:規定了子類必須有(覆蓋)這個方法,具體功能交給子類(按自己的功能)實現
4.抽象類的作用:抽象類要求了子類的結構,就是一個規范(程序員不能不寫某種方法)
abstract class Person { abstract function eat(); abstract function sleep(); function walk(){} }; class Men extends Person { function eat(){ echo "吃米飯
"; } function sleep(){ echo "睡床
"; } }; class Women extends Person { function eat(){ echo "吃面
"; } function sleep(){ echo "睡床
"; } }; $s=new Men; $s->eat();//吃米飯
二、面向對象的接口技術
1.接口是一種特殊的抽象類(有抽象類所有特性)
2.接口與一般抽象類的區別(接口也是一種規范)
a.接口內所有方法必須全是抽象方法 b.接口中屬性必須是常量(const聲明) c.接口內權限必須是public(默認即是,不必聲明),抽象類可以有protected d.聲明接口不使用class,而是interface e.接口中的抽象方法不需要abstract特殊聲明,因為都是 f.可以用類::訪問屬性/方法
interface Demo { const NAME="wo"; function test(); }
3.接口的特性
a.接口可以繼承另一個接口(extends),但只有擴展關系,沒有覆蓋關系 b.可以使用一般類實現接口的*全部方法*(抽象方法必須全部覆蓋),即有覆蓋關系 c.可以使用抽象類來實現接口的*部分方法*,即有覆蓋關系 d.只要是覆蓋關系,即使用類/抽象類來實現接口,就要用implements關鍵字 e.extends:一個類只能有一個父類 f.implements:可以在使用extends繼承其他類的同時,進行對接口的實現,可以實現多個接口(一定要先extends,再implements) g.實現多個接口,以逗號分開多個接口名即可
interface Demo { const NAME="wo"; function test1(); function test2(); }; interface Test extends Demo { function test3(); }; class World { function test4(){ } }; interface Abc { function test5(); } class Fina extends World implements Test,Abc { function test1(){ echo "test1
"; } function test2(){ echo "test2
"; } function test3(){ echo "test3
"; } function test4(){ echo "test4
"; } function test5(){ echo "test5
"; } }; $p=new Fina; $p->test1();//test1 $p->test2();//test2 $p->test3();//test3 $p->test4();//test4 $p->test5();//test5
三、多態性(各個子類的形態功能不同)
1.必須有繼承關系,父類最好是接口或抽象類,如下為模擬USB接口下鼠標和鍵盤的多態,以及使用者進行調用的情況
interface USB { const WIDTH = 12; const HEIGHT = 3; function load(); function run(); function stop(); }; class Mouse implements USB { function load(){ echo "加載鼠標成功!
"; } function run(){ echo "運行鼠標功能!
"; } function stop(){ echo "鼠標工作結束!
"; } }; class Keyboard implements USB { function load(){ echo "加載鍵盤成功!
"; } function run(){ echo "運行鍵盤功能!
"; } function stop(){ echo "鍵盤工作結束!
"; } }; class Computer { //只要是繼承自USB抽象類的對象,不論什么設備,都執行三個方法 function useUSB(USB $usb){ $usb->load(); $usb->run(); $usb->stop(); } }; class Workers { function work(){ $c=new Computer; $m=new Mouse; $k=new Keyboard; $c->useUSB($m); $c->useUSB($k); } }; $w=new Workers; $w->work(); //加載鼠標成功! //運行鼠標功能! //鼠標工作結束! //加載鍵盤成功! //運行鍵盤功能! //鍵盤工作結束!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/25589.html
摘要:多態性面向對象三大特性封裝繼承多態。面向對象多態性存在的三個必要條件繼承重寫父類引用指向子類對象多態性的實現方式重寫與重載靜態多態性方法重載方法重載允許類具有多個相同名稱的方法,但是方法參數列表不同。 多態性 面向對象(OOP)三大特性:封裝、繼承、多態。 多態性(polymorphism)指同一行為具有多種不同表現形式,在面向對象程序設計中表現為同一消息可以根據發送對象的類型不同,做...
摘要:封裝是面向對象的特征之一,是對象和類概念的主要特性。通過這種方式,對象對內部數據提供了不同級別的保護,以防止程序中無關的部分意外的改變或錯誤的使用了對象的私有部分。構造函數通常被用來自動執行很多初始化操作。 之前的相關問題 面向對象和面向過程的差別,各自的優缺點 面向對象有哪些基本特性?各自特性帶來哪些好處 面向對象的基本語法? 面向對象的基本特性的基本實現 面向對象結合各種設計模式...
小編寫這篇文章的主要目的,主要是來給大家介紹關于Python的一些事情,主要還是涉及到面對面對象編程的一些實例,其中,主要涉及到的內容涵蓋封裝、繼承、多態等多種形式,就具體的形式,下面就給大家詳細解答下。 Python是一門面向對象的語言。面向對象都有三大特性:封裝、繼承、多態?! ∠旅娣謩e來說說這三大特性: 1、封裝 隱藏對象的屬性和實現細節,僅對外提供公共訪問方式。在python中用...
摘要:實現多態的三個必要條件繼承在多態中必須存在有繼承關系的子類和父類。參考面試題解惑系列九繼承多態重載和重寫面向對象三大特性封裝,繼承,多態以及抽象接口的介紹 版權聲明:本文由吳仙杰創作整理,轉載請注明出處:https://segmentfault.com/a/1190000009141566 1. 面向對象編程的三大特性 Java 面向對象編程有三大特性:封裝、繼承、多態。 1.1 封裝...
閱讀 1698·2023-04-26 01:02
閱讀 4841·2021-11-24 09:39
閱讀 1803·2019-08-30 15:44
閱讀 2874·2019-08-30 11:10
閱讀 1783·2019-08-30 10:49
閱讀 984·2019-08-29 17:06
閱讀 609·2019-08-29 16:15
閱讀 902·2019-08-29 15:17