面向对象的三大特性(重点!!!!)

 面向对象分三种特性:

1封装

2继承

3多态

封装的第一个步骤:将成员变量变成private

第二个步骤:在类里面做一个成员方法,间接访问

第三个步骤:在该方法中加限制条件

第一种写法:

class Ren{                          //定义名称
    public $name;                   //姓名
    public $sex;                           //性别
    public $birthday;                    //生日
    private $age;                        //年龄   私有的
    public function setage($age){         //把年龄定义       
        if($age>=18 && $age<=50){
            $this->age = $age;
        }
    }
}
$r = new Ren;
$r->name = "张三";
$r->setage(20);
var_dump($r);

 方法二:魔术方法

复制代码
class Ren{
    public $name;
    public $sex;
    public $birthday;
    private $age;
        public function __set($name,$value){
        if($name=="age"){
            if($value>=18 && $value<=50){
                $this->$name = $value;
            }
        }else{
            $this->$name = $value;
        }
    }    
    public function __get($name){
        return $this->$name;
    }
}
$r = new Ren();
$r->name = "张三";
$r->age = 20;   //自动调用魔术方法__set
echo $r->age;   //自动调用魔术方法__get
var_dump($r);
复制代码

    其中__set($name,$value)中第一个值为变量名,第二个为变量值。

  继承:

    概念:子类可以继承父类的一切,且可扩展自己的内容(父类不需要太具体)。

    特点:单继承,即一个子类只能有一个父类,同一个父类可以有多个子类。

  制作一个父类:

复制代码
class Ren{
    public $name;
    public $sex;
    public function say(){
        echo "人在讲话";
    }
}
复制代码

  制作子类:

复制代码
class China extends Ren{
    public $yuyan;
    public function say(){
        //调用父类里面的方法
        parent::say();
        echo "你好";
    }
}
$c = new China();
$c->say();
复制代码

    子类:

      1.可扩展自己的内容;

      2.可以对父类的方法进行重写,即函数重写(override)

      重写(override)对比重载(overload):

        (1)重写即子类对父类的方法进行重写;

        (2)重载发生于强类型语言中,让一个方法实现多个功能;

          重载条件:①同名方法;  ②参数不同;  ③参数相同,类型不同。

  多态:

    概念:当父类引用指向子类实例的时候,由于子类对父类的方法进行了重写,在调用该方法的时候所表现出的不同,我们称为多态。

    条件:

      1.必须有集成存在;

      2.有重写存在;

      3.方法不同。

    多态分为运行多态和编译多态:

      运行多态需要用到强类型语言;

      编译多态指的就是重载,重载在编译过程中会出现的不同。

    多态常发生在强类型语言中:同一类型,指向不同输出也不同,父类的引用完全可以指向子类的实例。

原文地址:https://www.cnblogs.com/palpitate/p/8243380.html