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

简介:

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

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

多态案例一:

复制代码
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。

本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/archive/2012/08/20/2647427.html,如需转载请自行联系原作者

相关文章
|
4月前
|
编译器 C++
[C++] 面向对象的三大特性:封装、继承和多态
[C++] 面向对象的三大特性:封装、继承和多态
34 0
|
6月前
|
Java
1.8 封装、继承、多态
1.8 封装、继承、多态
22 1
|
7月前
|
设计模式 数据安全/隐私保护
面向对象编程基础:封装、继承、多态与抽象的全面解析
面向对象编程基础:封装、继承、多态与抽象的全面解析
29 0
|
8月前
|
Java
面向对象编程基础:类、对象、封装、继承和多态
面向对象编程基础:类、对象、封装、继承和多态
89 0
|
9月前
浅谈 面向对象三大特性:封装 继承 多态
浅谈 面向对象三大特性:封装 继承 多态
70 0
面向对象的封装,继承,多态(一)
面向对象的封装,继承,多态。
63 0
面向对象的封装,继承,多态(一)
|
Java 编译器
java面向对象三大特性,多态篇
1.概述 多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:
130 0
java面向对象三大特性,多态篇
|
设计模式 Java 数据安全/隐私保护
【封装、继承、多态】总结
【封装、继承、多态】总结
77 0