PHP基础OOP(二) 多态
2014-01-01 22:26
302 查看
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.常量属于类,不属于对象,可以被子类继承
====================
多态是一种思想:从一个基类中派生,响应一个虚命令,产生不同的结果。
不同的对象执行相同的方法而产生不同的行为和结果
例如:很多植物都有开花和结果的特点,但是不同的植物开的花和结的果都不相同
实现多态的好处:
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,
写出通用的代码,做出通用的编程,以适应需求的不断变化。
多态的设计原则:
依赖于抽象,而不依赖于具体,增加灵活性和扩展性。
对外开放,对内封闭
实现多态的方式:
方法的重写与重载、抽象类、接口、继承、虚方法
抽象类: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.常量属于类,不属于对象,可以被子类继承
<?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)—多态
- php面向对象基础概念(多态)
- PHP面向对象三大特性之多态基础
- Java基础-OOP特性之封装、继承、多态、抽象
- php基础知识【oop/mvc/orm/aop】
- php基础---多态
- php OOP面向对象基础
- php基础6---抽象类与接口与多态
- PHP基础OOP(一)
- 跟着百度学PHP[4]OOP面对对象编程-17-多态
- php基础知识【oop/mvc/orm/aop】
- c++基础学习12-c++的多态与继承
- PHP进程通信基础——信号量+共享内存通信
- [黑马IOS自学第十一篇]OC语言基础,SELF关键字,面向对象概念,类学习多态,继承@property等
- php 安全基础 第七章 验证与授权
- 2017 泰牛PHP基础班+大牛班+大牛班高级课程
- 九、Java基础---------面向对象封装、继承、多态
- php基础知识收集--数组、文件、字符串、文件、会话
- php基础教程之mysqli
- php基础知识