摘要:一抽象方法和抽象類抽象方法一個(gè)方法如果沒(méi)有方法體沒(méi)有,直接分號(hào)結(jié)束,使用關(guān)鍵字修飾的方法,即是抽象方法抽象類如果類中有一個(gè)方法是抽象方法,則這個(gè)類是抽象類,該類使用來(lái)修飾注意抽象類中不一定必須有方法抽象類中有抽象方法抽象類不能創(chuàng)建對(duì)象其他方
一、抽象方法和抽象類
1.抽象方法:一個(gè)方法如果沒(méi)有方法體(沒(méi)有{},直接分號(hào)結(jié)束,使用abstrract關(guān)鍵字修飾的方法),即是抽象方法
2.抽象類:如果類中有一個(gè)方法是抽象方法,則這個(gè)類是抽象類,該類使用abstract來(lái)修飾
注意:
1.抽象類中不一定必須有方法 2.抽象類中有抽象方法 3.抽象類不能創(chuàng)建對(duì)象 4.其他方面與一般類完全一樣 5.抽象類必須有子類,子類將抽象類的抽象方法覆蓋,就有方法體了 6.子類必須覆蓋全部抽象方法,才能創(chuàng)建對(duì)象,如果只實(shí)現(xiàn)部分抽象方法,則子類還是抽象類
3.抽象方法的作用:規(guī)定了子類必須有(覆蓋)這個(gè)方法,具體功能交給子類(按自己的功能)實(shí)現(xiàn)
4.抽象類的作用:抽象類要求了子類的結(jié)構(gòu),就是一個(gè)規(guī)范(程序員不能不寫某種方法)
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();//吃米飯
二、面向?qū)ο蟮慕涌诩夹g(shù)
1.接口是一種特殊的抽象類(有抽象類所有特性)
2.接口與一般抽象類的區(qū)別(接口也是一種規(guī)范)
a.接口內(nèi)所有方法必須全是抽象方法 b.接口中屬性必須是常量(const聲明) c.接口內(nèi)權(quán)限必須是public(默認(rèn)即是,不必聲明),抽象類可以有protected d.聲明接口不使用class,而是interface e.接口中的抽象方法不需要abstract特殊聲明,因?yàn)槎际?f.可以用類::訪問(wèn)屬性/方法
interface Demo { const NAME="wo"; function test(); }
3.接口的特性
a.接口可以繼承另一個(gè)接口(extends),但只有擴(kuò)展關(guān)系,沒(méi)有覆蓋關(guān)系 b.可以使用一般類實(shí)現(xiàn)接口的*全部方法*(抽象方法必須全部覆蓋),即有覆蓋關(guān)系 c.可以使用抽象類來(lái)實(shí)現(xiàn)接口的*部分方法*,即有覆蓋關(guān)系 d.只要是覆蓋關(guān)系,即使用類/抽象類來(lái)實(shí)現(xiàn)接口,就要用implements關(guān)鍵字 e.extends:一個(gè)類只能有一個(gè)父類 f.implements:可以在使用extends繼承其他類的同時(shí),進(jìn)行對(duì)接口的實(shí)現(xiàn),可以實(shí)現(xiàn)多個(gè)接口(一定要先extends,再implements) g.實(shí)現(xiàn)多個(gè)接口,以逗號(hào)分開(kāi)多個(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
三、多態(tài)性(各個(gè)子類的形態(tài)功能不同)
1.必須有繼承關(guān)系,父類最好是接口或抽象類,如下為模擬USB接口下鼠標(biāo)和鍵盤的多態(tài),以及使用者進(jìn)行調(diào)用的情況
interface USB { const WIDTH = 12; const HEIGHT = 3; function load(); function run(); function stop(); }; class Mouse implements USB { function load(){ echo "加載鼠標(biāo)成功!
"; } function run(){ echo "運(yùn)行鼠標(biāo)功能!
"; } function stop(){ echo "鼠標(biāo)工作結(jié)束!
"; } }; class Keyboard implements USB { function load(){ echo "加載鍵盤成功!
"; } function run(){ echo "運(yùn)行鍵盤功能!
"; } function stop(){ echo "鍵盤工作結(jié)束!
"; } }; class Computer { //只要是繼承自USB抽象類的對(duì)象,不論什么設(shè)備,都執(zhí)行三個(gè)方法 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(); //加載鼠標(biāo)成功! //運(yùn)行鼠標(biāo)功能! //鼠標(biāo)工作結(jié)束! //加載鍵盤成功! //運(yùn)行鍵盤功能! //鍵盤工作結(jié)束!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/25589.html
摘要:多態(tài)性面向?qū)ο笕筇匦苑庋b繼承多態(tài)。面向?qū)ο蠖鄳B(tài)性存在的三個(gè)必要條件繼承重寫父類引用指向子類對(duì)象多態(tài)性的實(shí)現(xiàn)方式重寫與重載靜態(tài)多態(tài)性方法重載方法重載允許類具有多個(gè)相同名稱的方法,但是方法參數(shù)列表不同。 多態(tài)性 面向?qū)ο螅∣OP)三大特性:封裝、繼承、多態(tài)。 多態(tài)性(polymorphism)指同一行為具有多種不同表現(xiàn)形式,在面向?qū)ο蟪绦蛟O(shè)計(jì)中表現(xiàn)為同一消息可以根據(jù)發(fā)送對(duì)象的類型不同,做...
摘要:封裝是面向?qū)ο蟮奶卣髦?,是?duì)象和類概念的主要特性。通過(guò)這種方式,對(duì)象對(duì)內(nèi)部數(shù)據(jù)提供了不同級(jí)別的保護(hù),以防止程序中無(wú)關(guān)的部分意外的改變或錯(cuò)誤的使用了對(duì)象的私有部分。構(gòu)造函數(shù)通常被用來(lái)自動(dòng)執(zhí)行很多初始化操作。 之前的相關(guān)問(wèn)題 面向?qū)ο蠛兔嫦蜻^(guò)程的差別,各自的優(yōu)缺點(diǎn) 面向?qū)ο笥心男┗咎匦??各自特性帶?lái)哪些好處 面向?qū)ο蟮幕菊Z(yǔ)法? 面向?qū)ο蟮幕咎匦缘幕緦?shí)現(xiàn) 面向?qū)ο蠼Y(jié)合各種設(shè)計(jì)模式...
小編寫這篇文章的主要目的,主要是來(lái)給大家介紹關(guān)于Python的一些事情,主要還是涉及到面對(duì)面對(duì)象編程的一些實(shí)例,其中,主要涉及到的內(nèi)容涵蓋封裝、繼承、多態(tài)等多種形式,就具體的形式,下面就給大家詳細(xì)解答下。 Python是一門面向?qū)ο蟮恼Z(yǔ)言。面向?qū)ο蠖加腥筇匦裕悍庋b、繼承、多態(tài)?! ∠旅娣謩e來(lái)說(shuō)說(shuō)這三大特性: 1、封裝 隱藏對(duì)象的屬性和實(shí)現(xiàn)細(xì)節(jié),僅對(duì)外提供公共訪問(wèn)方式。在python中用...
摘要:實(shí)現(xiàn)多態(tài)的三個(gè)必要條件繼承在多態(tài)中必須存在有繼承關(guān)系的子類和父類。參考面試題解惑系列九繼承多態(tài)重載和重寫面向?qū)ο笕筇匦苑庋b,繼承,多態(tài)以及抽象接口的介紹 版權(quán)聲明:本文由吳仙杰創(chuàng)作整理,轉(zhuǎn)載請(qǐng)注明出處:https://segmentfault.com/a/1190000009141566 1. 面向?qū)ο缶幊痰娜筇匦?Java 面向?qū)ο缶幊逃腥筇匦裕悍庋b、繼承、多態(tài)。 1.1 封裝...
摘要:面向?qū)ο蟮乃枷胍呀?jīng)涉及到軟件開(kāi)發(fā)的各個(gè)方面。面向?qū)ο蟮某绦蛟O(shè)計(jì)是將數(shù)據(jù)成員和屬于此數(shù)據(jù)的操作方法放在同一實(shí)體或?qū)ο笾校褪欠庋b。 面向?qū)ο? 什么是面向?qū)ο?..
閱讀 1794·2023-04-26 01:02
閱讀 4986·2021-11-24 09:39
閱讀 1866·2019-08-30 15:44
閱讀 3069·2019-08-30 11:10
閱讀 1845·2019-08-30 10:49
閱讀 1105·2019-08-29 17:06
閱讀 658·2019-08-29 16:15
閱讀 959·2019-08-29 15:17