• php学习十四:抽象,接口和多态


    多态为面向对象编程的精华所在,js等面向过程的语言虽然可以模拟面向对象,但是毕竟模仿的永远比不上真的,所以了解而且会使用面向对象的多态是必不可少的

    在了解多态之前,我们必须要了解接口,但是接口又是在抽象之上建立的.....(哎,废话真多)

    一:抽象

    * 1.必须以abstract来修饰的方法
    * 2.不能有方法体
    * 3.可以在抽象类里面写抽象方法和非抽象方法,反过来却不行
    * 4.能存放抽象方法的类就是抽象类,
    * 5.抽象类的子类必须要用抽象类的抽象方法
    //抽象类(父类)
    abstract class Human { public $name; //抽象方法 public abstract function speak(); //非抽象方法 public function run(){ echo "我是抽象类里面的非抽象方法"; } }

      

    include_once "Human.class.php";
    
    //抽象类的子类必须要用抽象类的抽象方法
    class Workers extends Human
    {
        function __construct($name)
        {
            $this->name=$name;
    
        }
    
        //抽象方法,必须要用
        public function speak()
        {
            echo "父类告诉我必须要用这个吃饭的而抽象方法";
        }
    
        //非抽象方法,可以不用
        public function run(){
            echo "我是抽象类里面的非抽象方法{$this->name}";
        }
    }
    

      

    二.接口

    * 1.接口中不需要使用abstract关键字来修饰方法,默认的就是抽象方法,所有方法都是抽象方法,没有非抽象方法
    * 2.接口中所有的属性都必须是常量,但很少在接口中使用属性;
    * 3.关键字interface来声明一个接口
    * 4.实现接口(无法继承),关键字implements,实现多个接口的时候,在后面加逗号进行添加

    //定义一个接口
    
    interface Animal{
    
        //常量成员
        const legs=10;
    
        //抽象方法
        public function play();
    
    }
    

      

    include_once "Animal.interface.php";
    //实现多个接口的时候,在后面加“,”进行添加
    class Dog implements Animal
    {
        public function play(){
            echo "狗会跑";
        }
     
    }
    

      

    三.多态

    以上面的接口为例来做多态,我们在实现接口的时候,只写了一个dog类,那我想写一个cat类,它会的play行为是上树,这个时候如果我们不用多态的话,是不是得每次都实例化一次,然后再挨个挨个的实现接口,这就显的麻烦了,这个时候用多态就显得简洁一些

    好,那么我在定义一个cat类来实现接口

    include_once "Animal.interface.php";
    class Car  implements Animal
    {
     
        public function play(){
            echo "猫会抓老鼠";
        }
    }
    

      

    此时,我如果想用多态的话,需要再定义一个类来实现play这一行为,我把它定义为Boy类

    include_once "Dog.class.php";
    include_once "Car.class.php";
    include_once "Animal.interface.php";
    class Boy{
    
        public function  makeAnimalPlay(Animal $animal){
    
            $animal->play();
    
        }
    
    
    }
    

      

    主函数main里的代码是这个样子的

    function __autoload($name){
        $path = $name.".class.php";
        include_once $path;
    }
    
    $dog = new Dog();
    
    $car = new Cat();
    
    $boy = new Boy();
    
    $boy->makeAnimalPlay($dog);
    
    $boy->makeAnimalPlay($cat);
    

      这个时候我们就完成了一个简单的多态了



  • 相关阅读:
    csu 1604 SunnyPig (bfs)
    openjudge 大师兄,师傅被妖怪抓走啦
    poj 3264 线段树 求区间最大最小值
    bzoj 1012 维护一个单调数列
    poj 1840 暴力+标记
    最短路径(Dijkstra实现)
    最小生成树(Kruskal实现)
    最小生成树(Prim实现)
    拓扑排序(Kahn实现)
    拓扑排序(DFS实现)
  • 原文地址:https://www.cnblogs.com/mmykdbc/p/6648305.html
Copyright © 2020-2023  润新知