面向对象特性-多态

来源:互联网 发布:软件项目范围管理 编辑:程序博客网 时间:2024/05/22 08:15

(1)抽象类和方法

只在父类中声明,在子类中实现,用abstract声明。作用是给子类作规范。

规则:抽象类不能实例化,只能被继承;抽象方法必须被子类方法重写。

创建:

abstract class Computer{}

抽象类里面的抽象方法必须在子类里面重写,不然会报错。

abstract class Computer{abstract public function _run();}class NoteComputer extends Computer{//抽象类里面的抽象方法,必须在子类里面重写public function _run(){echo '我是子类里的方法';}}

抽象类里面的普通方法不需要重写,子类会自动继承下来。

只要类里面有一个抽象方法,那么这个类必须是抽象类,类前面必须加上abstract;反之也是,抽象类里面要有抽象方法,不然里面要加上抽象干嘛呢。

抽象类里面也是可以有正常的字段的。

类只支持单继承,不能实现多继承的。


(2)接口(interface)

接口是一种特殊的抽象类,也是不能实例化的。

接口定义了实现某种类的一般规范,声明了所需的函数和常量,但不指定如何实现。

接口是为了规范实现它的子类,以达到统一的目的。

规则:类里面全部为抽象方法(不需要声明abstract),没有方法体;接口抽象方法必须是public;成员(字段)必须是常量。

定义为:

interface Computer{const NAME = '联想';public function _run();public function _run2();}

使用接口常量:

echo Computer::NAME;
子类继承接口的说法,叫做实现。

class NoteComputer implements Computer{public function _run(){echo '我重写了_run';}public function _run2(){echo '我重写了_run2';}}
接口是可以多实现的。

interface Computer{const NAME = '联想';public function _run();public function _run2();}interface Computer2{public function _run3();}class NoteComputer implements Computer,Computer2{public function _run(){echo '我重写了_run';}public function _run2(){echo '我重写了_run2';}public function _run3(){echo '我重写了_run3';}}
如何选择抽象类和接口呢?如果是要继承多个类的方法规范,就用接口;如果要共享一个方法体内容,就用抽象类。


(3)多态

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

多态,多种形态。

一个动作由不同的人去执行,而产生不同的效果或者结果,即为多态。

一个人通过不同的状态去执行同一种动作,形成不同的结果,也可以称作为多态。

多态原理,就是类写好啦,不要去修改它,只要在类外的调用参数的更改

<?php//园丁剪修理花草//理发师剪理发//总裁剪裁员// 人笔记本运行win7开机了// 人台式机运行xp开机了interface Computer{public function version();//这个方法表示采用什么电脑public function work();//这台电脑是怎么运行的}//创建一个笔记本类来实现接口class NoteComputer implements Computer{public function version(){echo '笔记本';}public function work(){echo '可以便携式运行win7';}}//创建一个台式机的类来实现接口class DesktopComputer implements Computer{public function version(){echo '台式机';}public function work(){echo '在工作站运行xp';}}class Person{//创建一个方法来接收电脑//将它们的对象传递进来就好啦public function _run($type){echo '此人的';$type->version();$type->work();}}$notecomputer = new NoteComputer();$desktopcomputer =new DesktopComputer();$person = new Person();$person->_run($notecomputer);//这种传递,叫做对象引用的传递?>



0 0