• 面向对象三大特性(封装,继承,多态)之多态


    在面向对象语言中,接口的多种不同的实现方式即为多态。

    多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息将可以产生不同的结果,这种现象称为多态性。

    多态案例一:

    class employee{//定义员工父类
        protected function working(){//定义员工工作,需要在子类的实现
            echo "本方法需要在子类中重载!";
        }
    
    }
    
    class painter extends employee{//定义油漆工类
        public function working(){//实现继承的工作方法
            echo "油漆工正在刷漆!\n";
        }
    }
    
    class typist extends employee{//定义打字员类
        public function working(){
            echo "打字员正在打字!\n";
        }
    }
    
    class manager extends employee{//定义经理类
        public function working(){
            echo "经理正在开会!";
        }
    }
    
    function printworking($obj){//定义处理方法
        if($obj instanceof employee){//若是员工对象,则显示其工作状态
            $obj->working();
        }else{//否则显示错误信息
            echo "Error: 对象错误!";
        }
    }
    
    printworking(new painter());//显示油漆工的工作
    printworking(new typist());//显示打字员的工作
    printworking(new manager());//显示经理的工作

    多态案例二:

    <?php
    //定义一个形状的接口,里面有两个抽象方法让子类去实现
    interface Shape{
        function area();
        function perimeter();
    }
    //定义一个矩形子类实现形状接口中的周长和面积
    class Rect implements Shape{
        private $width;
        private $height;
        function __construct($width,$height){
            $this->width = $width;
            $this->height = $height;
        }
        function area(){
            return "矩形的面积为:".($this->width*$this->height);
        }
        function perimeter(){
            return "矩形的周长为:".(2*($this->width+$this->height));
        }
    }
    class Circular implements Shape{
        private $radius;
        function __construct($radius) {
            $this->radius=$radius;
        }
        function area(){
            return "圆形的面积是:".(3.14*$this->radius*$this->radius);
            
        }
        function perimeter(){
            return "圆形的周长是:".(2*3.14*$this->radius);
        }
    }
    function printcontent($obj){
        if($obj instanceof Shape){
           echo $obj->area()."<br>";
           echo $obj->perimeter()."<br>";
            
        }else{
            echo "Error:对象错误!";
        }
    }
    printcontent(new Circular(4));
    printcontent(new Rect(3,5));
    
    
    ?>

    多态的实现可以通过继承父类,或是继承接口来实现。

    继承父类时,要重载其中的方法。继承接口时,要根据具体的需要,改写抽象方法。

    instanceof用来检测一个给定的对象是否属于(继承于)某个类(class)、某个类的子类、某个接口(interface)。如果是则返回true。

  • 相关阅读:
    HDU 4691
    cin和scanf的速度差别
    一点点webservice的小知识
    Geetest 极验验证 验证图片拼图
    web api post传一个参数时 值永远是null
    关于支付宝支付的
    发布网站后只能在服务器上访问 外网访问不了??
    sidePagination: "server"和responseHandler: responseHandler
    .net 找回密码的第一步 第二步 第三步的进程条
    关于设置一个全局只读变量来实现验证
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/2647427.html
Copyright © 2020-2023  润新知