PHP 基础  多态 
====================
多态是一种思想:从一个基类中派生,响应一个虚命令,产生不同的结果。
                不同的对象执行相同的方法而产生不同的行为和结果
例如:很多植物都有开花和结果的特点,但是不同的植物开的花和结的果都不相同

实现多态的好处:
    把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,
    写出通用的代码,做出通用的编程,以适应需求的不断变化。

多态的设计原则:
        依赖于抽象,而不依赖于具体,增加灵活性和扩展性。
        对外开放,对内封闭

实现多态的方式:
    方法的重写与重载、抽象类、接口、继承、虚方法

抽象类:abstract 修饰
    1.抽象类不能被实例化
    2.一个方法如果是抽象方法,那么所在的类必须是抽象类
    3.抽象方法:abstract修饰,没有实现,即没有方法体
    4.非抽象类继承抽象类必须实现抽象类的所有抽象方法
    5.抽象类与普通类之间是继承 extends

接口:interface 修饰
    1.类实现接口使用 implements
    2.接口类使用interface修饰,接口中只的方法无方法体
    3.体现了高内聚,低耦合的思想
    4.接口只能被继承,不能实例化,接口与接口之间可以继承extends
    5.接口中的方法必须是公有的public,默认为public

接口与抽象类的区别:
    1.抽象类中可以有已经实现的方法,但接口中只能有未实现的方法
    2.类可以多继承接口,但只能继承一个抽象类,对抽象类不能多继承
接口与继承的比较:
    1.接口的多继承是对普通类的单继承的一种补充
    2.可以在不破坏类层级的前提下,对某个类的功能进行扩展

final:PHP5.0以后新增(只能修饰类与方法)
    1.final修饰的类相当于C#中的密封类,此类不能被继承
    2.final修饰的方法不能被子类重写

const:常量
    1.不能被修改的变量,在内存中存储在专有的常量区
    2.可以定义在类或接口中,定义时,必须赋值
    3.常量名一般为大写,无修饰符,默认public,访问时使用:类名或接口名::常量名
    4.常量属于类,不属于对象,可以被子类继承

Code<?php

//抽象类Animal
abstract class Animal
{
public $name; //抽象方法 Cry();
public abstract function Cry(); public function GetName()
{
return $this->name;
}
} class Cat extends Animal{
public function Cry(){ echo("喵 喵 喵\n");
}
}
class Dog extends Animal{
public function Cry(){ echo("汪 汪 汪\n");
}
}
$c = new Cat();
$c->Cry(); $d = new Dog();
$d->Cry(); //接口
interface IUSB
{
public function Start();
public function Stop();
} interface IWork
{
function Read();
function Write();
} class Device
{
public $name;
function __construct($name)
{
$this->name = $name;
}
public function GetName()
{
echo $this->name."\n";
}
} //Camera类实现IUSB接口中的方法
class Camera implements IUSB
{
function Start(){
echo("相机开始工作\n");
}
function Stop(){
echo("相机停止工作\n");
}
} //Phone类继承一个Device类并实现IUSB接口中的方法
class Phone extends Device implements IUSB,IWork
{
function __construct($name)
{
parent::__construct($name);
} function Start(){
echo("手机机开始工作\n");
}
function Stop(){
echo("手机停止工作\n");
} function Read(){
echo "数据读取...\n";
}
function Write(){
echo "写入数据中...\n";
}
} $camera = new Camera();
$camera->Start();
$camera ->Stop(); $phone = new Phone("诺机亚");
$phone->Start();
$phone ->Stop();
$phone->Read();
$phone ->Write();
$phone->GetName(); //输出:
// 喵 喵 喵
// 汪 汪 汪
// 相机开始工作
// 相机停止工作
// 手机机开始工作
// 手机停止工作
// 数据读取...
// 写入数据中...
// 诺机亚 ?>

PHP基础OOP(二) 多态的更多相关文章

  1. 深入理解OOP(二):多态和继承(继承)

    本文是深入浅出OOP第二篇,主要说说继承的话题. 深入理解OOP(一):多态和继承(初期绑定和编译时多态) 深入理解OOP(二):多态和继承(继承) 深入理解OOP(三):多态和继承(动态绑定和运行时 ...

  2. Java基础十二--多态是成员的特点

    Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println( ...

  3. 深入理解OOP(三):多态和继承(动态绑定和运行时多态)

    在前面的文章中,我们介绍了编译期多态.params关键字.实例化.base关键字等.本节我们来关注另外一种多态:运行时多态, 运行时多态也叫迟绑定. 深入理解OOP(一):多态和继承(初期绑定和编译时 ...

  4. python基础——继承和多态

    python基础——继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类 ...

  5. SpringBoot 基础(二)

    目录 SpringBoot基础(二) 一.操作数据库 1. SpringBootJdbc 2. SpringBoot 整合 Mybatis 3. SpringBott 使用JPA 二.使用 Thyme ...

  6. Linux基础练习题(二)

    Linux基础练习题(二) 1.复制/etc/skel目录为/home/tuer1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限. [root@www ~]# cp -r ...

  7. Bootstrap <基础十二>下拉菜单(Dropdowns)

    Bootstrap 下拉菜单.下拉菜单是可切换的,是以列表格式显示链接的上下文菜单.这可以通过与 下拉菜单(Dropdown) JavaScript 插件 的互动来实现. 如需使用下列菜单,只需要在 ...

  8. RequireJS基础(二)

    上一篇是把整个jQuery库作为一个模块.这篇来写一个自己的模块:选择器. 为演示方便这里仅实现常用的三种选择器id,className,attribute. RequireJS使用define来定义 ...

  9. Servlet基础(二) Servlet的生命周期

    Servlet基础(二) Servlet的生命周期 Servlet的生命周期可以分为三个阶段: 1.初始化阶段 2.响应客户请求阶段 3.终止阶段 Servlet的初始化阶段 在下列时刻Servlet ...

随机推荐

  1. winfrom程序如何做到快速关闭窗体

    private void Form1_FormClosed(object sender, FormClosedEventArgs e) { Process.GetCurrentProcess().Ki ...

  2. Java过滤器与SpringMVC拦截器之间的关系与区别

    今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊,而且看的比较粗浅,没有一个全局而又细致的认识,由于已至深 ...

  3. SQL 命令

    登录系统: mysql -u user_name -p 查看当前用户列表:select user; 查看数据库列表: show databases 进入某数据库: use db_name; 查看某数据 ...

  4. POJ 1061青蛙的约会(拓展欧几里德算法)

    题目链接: 传送门 青蛙的约会 Time Limit: 1000MS     Memory Limit: 65536K Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见 ...

  5. FZU 2191 完美的数字

    题目链接: 传送门 完美的数字 Time Limit: 1000MS     Memory Limit: 65536K 题目描述 Bob是个很喜欢数字的孩子,现在他正在研究一个与数字相关的题目,我们知 ...

  6. zabbix监控模式、分布式、自动化

    适用场景: 1.监控主机多,性能瓶颈 2.多机房,防火墙 zabbix监控模式 针对agent来说 - 被动模式 - 主动模式(主动汇报服务端) 1)当监控主机超过300台,建议使用主动模式 2)当队 ...

  7. photobooth.js

    HTML5 Webcam for your website, photobooth.js

  8. winform的tab跳到下一个

    先设置TabStop=true,再设置TabIndex的顺序

  9. Windows 无法自动将 IP 协议堆栈绑定到网络适配器。解

    Windows 无法自动将 IP 协议堆栈绑定到网络适配器.解  昨天断网了,所以把珍藏已久的无线网卡拿出来蹭网.我系统是Windows 7 但是装上去东显示已启用,就是用不了,用windows诊断是 ...

  10. delphi---控件使用

    1.TBitBtn控件 属性:Glyph,指定要显示的位图:    Layout ,设置位图在按钮的位置:Kind,要想用自设位图,这个属性要设置bkCustom; 2.TTreeView TTree ...