PHP面向对象特性-多态

来源:互联网 发布:智慧足迹数据 编辑:程序博客网 时间:2024/06/05 14:09

1、抽象类和方法
创建一个抽象类 在class前面加上abstract。
抽象类不能被实例化。
只要类里面有一个抽象方法,那么这个类必须是抽象类,类前必须加上abstract。

abstract class Computer{        //在抽象类里创建一个普通方法        //抽象方法不能够实现方法体的内容        abstract public function _run();        public function _run2(){            echo '我是父类的普通方法';        }    }//抽象类是用来给子类来继承的,实现一种资源和规范的共享。    class NoteComputer extends Computer{        //抽象类里的抽象方法,子类必须重写,不然会报错。        //抽象类里的普通方法不需要重写,子类会直接继承。        public function _run(){            echo '我是子类的方法';        }    }    $notecomputer = new NoteComputer();    $notecomputer->_run2();

2、接口
特殊的抽象类。
到底应该用抽象类还是接口呢?
如果你要继承多个类的方法规范,那么就用接口就好了。
如果你要共享一个方法体内容,就用抽象类。
类不能实现多继承,只支持单继承,但是接口可以。
作用:规范他们的子类,以达到一致目的。

interface Computer{    //成员字段必须是常量        const NAME = '联想 ';    //接口里的所有方法都是抽象方法,不能够写方法体        public function _run();        public function _run2();    }    interface Computer2{        public function _run3();    }    //子类继承接口的说法,叫做实现,接口可以多实现。    class NoteCompuyer implements Computer{        public function _run(){            echo '我重写了run';        }        public function _run2(){            echo '我重写了run2';        }        public function _run3(){        }    }

3、多态
字面意思:多种形态。
一个动作由不同的人去执行产生不同的效果
一个人通过不同的状态去执行同一个动作形成的不同的动作。
多态的原理:就是类都写好了,不要去修改它,只要在类外调用参数修改。而最后的结果也会得到更改,这就是类的多态。

    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){            $type->version();            $type->work();        }    }    //有 一个接口 两个类    $notecomputer = new NoteComputer();    $desktopcomputer = new DesktopComputer();    $person = new Person();    //通过传不同的参数来得到不同的结果    $person->_run($notecomputer);    //结果:笔记本可以便携式运行Win7    $person->_run($desktopcomputer);    //结果:台式机在工作站运行XP