多态
抽象类和接口都可以实现多态 多态是指OOP能够根据类的上下文来重新定义或改变类的性质或行为,或者说接口的多种不同的实现方式即为多态。把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适用需求的不断变化。 什么叫做多态,字面意思,多种形态 一个动作由不同的人去执行,而产生不同的效果或结果,即为多态 一个人通过不同的状态,去执行同一种动作,形成不同的结果,也可以称作为多态。 对比 // 园丁 剪 修理花草 // 理发师 剪 理发 // 总裁 剪 裁员
// 张三 笔记本 运行 win7开机了 // 张三 台式机 运行 win8开机了
下面的例子是以张三对不同电脑的相同动作,形成不同结果的实现
// 定义电脑接口类 interface Computer{ // 定义电脑版本方法 public function version(); // 定义电脑工作 public function work(); } // 定义笔记本类 class NoteComputer implements Computer{ // 笔记本类实现版本方法 public function version(){ echo "笔记本DELL"; } // 笔记本类工作 public function work(){ echo "启动了win7系统"; } } //定义台式机类 class DeskTopComputer implements Computer{ // 台式机类版本 public function version(){ echo "台式机华硕"; } // 台式机类工作 public function work(){ echo "启动了win8系统"; } } // 定义一个人的类 class Person{ private $_name="张三"; public function __construct() { echo "<meta charset=utf8>"; } // 这个_run方法会持有对象的引用,对象引用可以通过使用接口定义的函数,实现不同功能 // 也就是实现了 /* * // 张三 笔记本 运行 win7开机了 // 张三 台式机 运行 win8开机了 * */ public function _run($type){ echo $this->_name; $type->version(); $type->work(); } } // 多态的原理,就是把类都写好了,不要去修改他,只要在类外的调用参数的更改 // 而最后的结果也会得到更改,那么这个就是多态
//创建一个笔记本 $noteComputer = new NoteComputer(); //创建一个台式机 $deskTopComputer = new DeskTopComputer(); //创建一个人 $person = new Person(); // 这种传递对象的方式,叫做对象引用的传递,也叫持有对象引用 $person->_run($deskTopComputer);
// 这是很重要的内容 //多态的原理,就是类都写好了,不要去修改它,只要在类外调用参数的更改 // 而最后的结果也会得到更改,那么这个就是多态