zoukankan      html  css  js  c++  java
  • 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);
    

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



  • 相关阅读:
    Atitit.Java exe bat  作为windows系统服务程序运行
    Atitit. Object-c语言 的新的特性  attilax总结
    Atitit. Object-c语言 的新的特性  attilax总结
    Atitit。Time base gc 垃圾 资源 收集的原理与设计
    Atitit。Time base gc 垃圾 资源 收集的原理与设计
    Atitit.go语言golang语言的新的特性  attilax总结
    Atitit.go语言golang语言的新的特性  attilax总结
    Atitit.pdf 预览 转换html attilax总结
    Atitit.pdf 预览 转换html attilax总结
    Atitit.office word  excel  ppt pdf 的web在线预览方案与html转换方案 attilax 总结
  • 原文地址:https://www.cnblogs.com/mmykdbc/p/6648305.html
Copyright © 2011-2022 走看看