博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面向对象的特性:多态性
阅读量:7251 次
发布时间:2019-06-29

本文共 3247 字,大约阅读时间需要 10 分钟。

一、抽象方法和抽象类

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(默认即是,不必声明),抽象类可以有protectedd.声明接口不使用class,而是interfacee.接口中的抽象方法不需要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://yqhbm.baihongyu.com/

你可能感兴趣的文章
flutter 环境搭建
查看>>
Win 7 deskhelp
查看>>
移动端固定底部-ios中钉钉解决方法
查看>>
textbox设置样式为空背景色透明
查看>>
Sybase SQL Anywhere 7 数据库修复成功
查看>>
发展到1Gbps及其以上的速度
查看>>
TurboMail智慧协同通讯平台
查看>>
TurboMail为企业提供海量投递邮件群发系统
查看>>
Linux系统命令Cut使用
查看>>
我的友情链接
查看>>
MySQL 游标(cursor)简单应用
查看>>
10个让朋友对你刮目相看的CoffeeScript单行代码绝技
查看>>
我的友情链接
查看>>
hadoop与spark集成开发环境
查看>>
[置顶] 关于jquery某一元素重复绑定的问题
查看>>
Android Camera2 拍照速度过慢问题
查看>>
摄像头远程监控的Vb.net实现方法(转)
查看>>
ubuntu安装nodejs
查看>>
【Web探索之旅】第一部分:什么是Web?
查看>>
man用来显示中文cman
查看>>