PHP面向对象多态性的应用

多态是面向对象的三大特性中除封装和继承之外的另一重要特性。它展现了动态绑定的功能,也称为“同名异式”。多态的功能可让软件在开发和维护时,达到充分的延伸性。事实上,多态最直接的定义是让具有继承关系的不同类对象,可以对相同名称的成员函数调用,产生不同反应效果。所谓多态性就是指一段程序能够处理多种类型对象的能力,在PHP中,多态值指的就是方法的重写。方法重写是指一个子类中可以重新修改父类中的某些方法,使其具有自己的特征。重写要求子类的方法和父类的方法名称相同,这可以通过声明抽象类或是接口来规范。
我们通过计算机USB设备的应用来介绍一下面向对象中的多态性,目前USB设置的种类仅我们自己用过的我想就有十几种吧。例如USB鼠标、USB键盘、USB存储设备等,这些计算机的外部设备都是通过USB接口连接到计算机以后,被计算机调用并启动运行的。也就是计算机正常运行的同时,没插入一种不同USB设备,就为计算机扩展一样功能,这正是我们所说的多态特征。那么为什么每个USB设备不一样,但都可以被计算机应用呢?那是因为每个USB设置都要遵守电脑USB接口的开发规范,都具有相同的能被计算机加载到并启用的方法,但运行各自相应的功能。这也正是我们对多态的定义,假设我们有一个主程序已经开发完成,需要后期由其他开发人员为其扩展一些功能,但需要在不改动主程序的基础上就可以加载到这些扩展的功能模块,其实也就是为程序开发一些插件。这就需要在主程序中需要为扩展的插件程序写好接口规范,然后每个插件只有按照规范去实现自己的功能,才能被主程序应用到。在计算机中应用USB设备的程序设计如下所示:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<?php

//定义一个USB接口,让每个USB设备都遵守这个规范

interface USB{

function run();

}

class Computer{

//计算机类中的一个方法可以应用任何一种USB设备

function useUSB($usb){

$usb->run();

}

}

$computer =new Computer;

$computer ->useUSB(new Ukey()); //为计算机插入一个usb键盘设备,并运行

$computer ->useUSB(new Umouse()); //为计算机插入一个usb鼠标设备,并运行

$computer ->useUSB(new Ustore()); //为计算机插入一个usb存储设备,并运行

?>

下面的代码根据USB接口定义的规范,实现了USB键盘、USB鼠标和USB存储三个设备,当然可以去实现更多的USB设置,都按照自己设备的功能重写了run()方法,所以插入计算机启动运行后每个USB设备都有自己的形态。代码如下所示:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<?php

//扩展一个USB键盘设备,实现usb接口

class Ukey implements USB {

function run(){

echo "运行USB键盘设备<br>";

}

}

//扩展一个USB鼠标设备,实现usb接口

class Umouse implements USB {

function run(){

echo "运行USB鼠标设备<br>";

}

}

//扩展一个USB存储设备,实现usb接口

class Ustore implements USB {

function run(){

echo "运行USB存储设备<br>";

}

}

?>

>> 本文固定链接: http://php.ncong.com/php_course/oop/duotai.html

>> 转载请注明: 恩聪php 2014年07月25日 于 恩聪PHP学习教程 发表

PHP面向对象多态性的应用

时间: 2024-11-04 05:02:39

PHP面向对象多态性的应用的相关文章

java面向对象- 多态性的体现和使用

多态体现: 方法的重载和重写 对象的多态性 2.对象的多态性: 向上转型:程序会自动完成 父类 父类对象 = 子类实例 向下转型:强制类型转换 子类 子类对象 = (子类)父类实例 class A{ public void tell01(){ System.out.println("A--tell01"); } public void tell02(){ System.out.println("A--tell02"); } } class B extends A{

面向对象多态性

abstract class TakeOffSystem { public abstract void fly(); public abstract void land(); } class BattlePlan extends TakeOffSystem{ public void fly(){ System.out.println("战斗机起飞了"); } public void land(){ System.out.println("战斗机降落了"); } }

面向对象高级部分

一.知识点 1.1 继承 1.2 抽象类 1.3 接口 1.4 多态 二.具体内容 举个例子:人类,有姓名,年龄的属性和说话的方法 学生类,姓名.年龄.学号的属性和说话.考试的方法 Strudent类比Person类多了学好的属性和考试的方法 public class Student extends Person{ private String stuNo; public String getStuNo(){ return stuNo; } public String setStuNo(Stri

C++标准转换运算符dynamic_cast

dynamic_cast <new_type> (expression) dynamic_cast运算符,应该算是四个里面最特殊的一个,因为它涉及到编译器的属性设置,而且牵扯到的面向对象的多态性跟程序运行时的状态也有关系,所以不能完全的使用传统的转换方式来替代.但是也因此它是最常用,最不可缺少的一个运算符. 与static_cast一样,dynamic_cast的转换也需要目标类型和源对象有一定的关系:继承关系. 更准确的说,dynamic_cast是用来检查两者是否有继承关系.因此该运算符实

C++ 继承与接口 知识点 小结(一)

[摘要] 要求理解覆盖.重载.隐藏的概念与相互之间的区别:熟记类继承中对象.函数的访问控制:掌握虚函数.虚函数表.虚函数指针的联系:理解区分虚函数和虚继承在虚方法.虚指针在空间分配上的重点与难点:熟练使用多重继承,要求能区分基类的同名函数和基类的空间布局. [正文] 类继承中的覆盖 #include<iostream> using namespace std; class A { protected: int m_data; public: A(int data = 0) { m_data =

设计模式最后一击

关于这篇文章 设计模式是每个面向对象开发者必备的知识,是面向对象设计的经验之谈.但是设计模式对于工程人员来讲又是模糊的一门技术,因为他没有严格的数学分析与证明,是实践检验下的合理的经验,对于初学者尤其难理解.笔者也曾经困惑于此,随着工程实践的增加,越来越对设计模式明晰起来,因此想写一篇最终的总结,将我对设计模式的理解简洁的写下,力求一针见血,以后便不再纠结于此,也供其他朋友参考.指正和交流. 设计模式基本准则 虽然设计模式是实践下的产物,但是在最初设计时也是遵循了一些共性的原则性的东西,笔者认为

Android安卓开发环境搭建应用游戏项目实战知识体系_极客学院

Java是Android开发的主要语言,所以掌握Java语言基础非常重要,本阶段讲解了Java的基本语法,要深入掌握Java语言,可以通过Java学习路径图学习. 17课程 10小时 19分钟 1.Java编程基础知识入门:变量与数据类型 本课学习变量的命名.定义和初始化及整数.浮点.字符数据类型. 25课时,141分钟 626人学习 2.Java语言Switch语句详解 本课学习switch语句,switch语句是分支语句的一组,适用于判断同一变量的多种状态,进行流程控制. 5课时,17分钟

13.对象的转型

对象的向上转型 将子类的对象赋值给父类的引用 一个引用能够调用那些成员(变量和函数),取决于这个引用的类型 一个引用调用的是哪一个方法,取决于这个引用所指向的对象     classPerson{ String name; int age; void introduce(){ System.out.println("我的名字是:"+ name +",我的年龄是:"+ age); } } classStudent extends Person{ String addr

python-工厂方法模式

简单工厂模式的不足: 在简单工厂模式中,只提供了一个工厂类,该工厂类处于对产品类进行实例化的中心位置,它知道每一个产品对象的创建细节,并决定何时实例化哪一个产品类.简单工厂模式最大的缺点是当有新产品要加入到系统中时,必须修改工厂类,加入必要的处理逻辑,这违背了"开闭原则".在简单工厂模式中,所有的产品都是由同一个工厂创建,工厂类职责较重,业务逻辑较为复杂,具体产品与工厂类之间的耦合度高,严重影响了系统的灵活性和扩展性,而工厂方法模式则可以很好地解决这一问题. 说明: 工厂方法模式: 定