zoukankan      html  css  js  c++  java
  • 面向对象的3大特性

    1.封装 ****
    目的:为了使一个类更加安全

    做法: ****
    1.将成员变量变为私有的
    2.再类中做方法来间接访问成员变量
    3.在方法中加入控制条件

     //一个成员变量还是可以的,但是不适用于多个成员变量(即可写也可读)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    class Ren
    {
        public $code;   //人员代号
        public $name;   //人员姓名
        private $sex;    //人员性别
        private $age;    //人员年龄
         
        //构造函数:用来初始化性别
        function __construct($s)
        {
            $this->sex=$s;
        }
         
          
        //造一个修改年龄的方法   写
        function SetAge($a)
        {
            if($a>18 && $a<50)   //条件满足才往下进行
            {
                $this->age=$a;  
            }
        }
         
        //造一个获取age值得方法   读
        function GetAge()
        {
            return $this->age;  
        }
    }
     
    //造对象
    $r=new Ren("男");
    $r->SetAge(60);  /条件是18-50之间的年龄,60超出了,所以显示的null<br>var_dump($r);

    //对于多个变量就可以使用下面的方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    class Ren
    {
        public $code;   //人员代号
        public $name;   //人员姓名
        private $sex;    //人员性别
        private $age;    //人员年龄
         
        //构造函数:用来初始化性别
        function __construct($s)
        {
            $this->sex=$s;
        }
         
        //__set()魔术方法,给变量赋值
        function __set($n,$v)   //固定要有两个参数:变量名称,变量的值
        {
            if($n=="age"
            {
                if($v>18 && $v<50)  //限制条件
                {
                  $this->$n $v;   
                }
            }
            else
            {
              $this->$n $v;       
            }
        }
         
        //__get()魔术方法,取变量值
        function __get($n)    //一个变量名
        {
            return $this->$n;   
        }
         
    }
     
    //造对象
    $r=new Ren("男");
    $r->age=70;      //自动调用__set()方法,将变量名当做第一个参数,将等号右边的值当做第二个参数
    $r->name="zha";     //自动调用__set()方法,将变量名当做第一个参数,将等号右边的值当做第二个参数
    echo $r->sex;    //自动调用__get()方法<br>var_dump($r);

    //另一个知识点

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class Dog
    {
        public $name;
        function Jiao()
        {
          echo $this->name."囧";   //注意  
        }  
        function Setname($n)
        {
          $this->name=$n;
          return $this;   //返回新的对象
        }
    }
    $d=new Dog();
    $d->Setname("1")->Jiao();  //连续调对象

    2.继承

    父类
    子类:可以继承父类的一切
    重写的关键字override,子类对父类的方法

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

    例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    class Ren
    {
        public $name;
        function Say()
        {
            echo $this->name."正在说话";
        }  
         
    }
    class China extends Ren   //关键字 extend
    {
        //子类对父类的方法进行重写
        function Say()
        {
            parent::Say();    //在子类中调用父类的成员:找父类中的这个方法,把方法中的内容全部拿过来
            echo "你好"
        }
    }
     
    $c=new China();
    $c->Say();
    var_dump($c);

    子类对父类的方法重写后,父类的方法还有,另外加了一个方法,所以输出时是:正在说话你好  

    overlord 重载

    重载:它可以是类中的某个方法产生多种效果,根据传入的参数不同,可以执行不同的逻辑;重载是多态中的一种:编译多态

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

    条件有4个:
    1.要有继承
    2.父类引用指向子类实例
    3.要有重写
    4.调重写方法

  • 相关阅读:
    2.4学习
    2.3学习
    2.2学习
    2.1学习
    公文流转系统 模拟
    《GCC编译器的使用以及静态库和动态库的制作与使用》
    《驱动调试
    《海思3521D
    《驱动调试
    《驱动调试
  • 原文地址:https://www.cnblogs.com/zhangkeyu/p/6665672.html
Copyright © 2011-2022 走看看