美文网首页PHP经验分享
面向对象的特征是什么?

面向对象的特征是什么?

作者: 十年磨一剑1111 | 来源:发表于2020-01-12 12:10 被阅读0次

    面向对象的主要特征有抽象,继承,封装和多态
    1.抽象:说到抽象大家可能会联想到抽象类,抽象方法之类的。这样有助于大家理解,就是不去定义具体的实现,比如定义一个方法,没有具体的实现,它的实现由子类来完成,不同的子类可能有不同的具体实现,但是都拥有同一个方法。

    <?php
    abstract class Test {
            public abstract function a ();
    }
    

    2.继承:这个有点类似遗传学,同样的,如果一个类继承了另外一个类,也就继承了父类的方法或者实例变量,并且子类是可以修改或者增加新的方法以适应新的需要。

    <?php
    class A {
        private $a = 1;  //只能在类的内部能访问,子类不能访问,可以理解为不被子类继承
        protected $b = 2; //可以在类的内部,或者子类中可以访问
        public $c = 3;  //类的内部,子类中,类的外部都可以访问
            private function t1 () {
              echo "this is t1 function\r\n";
        }
        public  function t2 () {
              echo "this is t2 function\r\n";
        }
       public   function t3 () {
              echo "this is t3 function\r\n";
        }
    }
    
    class B extends A {
         public function t3() {
               echo "this is sub t3 function\r\n";
        }
    }
    
    $foo = new A();
    $bar = new B();
    $foo->t2();
    $bar->t2();
    $foo->t3();
    $bar->t3();
    

    看下输出结果:


    print.png

    3.封装:封装就是对类的内部的变量,方法加了保护,我们经常会看到的访问控制权限有,private,protected,public 这三种,具体的描述请看上面的那个例子里面的注释。

    4.多态:多态是指允许不同类的对象对同一消息做出不同的响应,比如在开完会后老板叫大家回去继续工作,假设员工来自不同的部门,那实际上不同的部门负责不同的工作,老板并没有吩咐大家具体做什么工作,具体的工作由每个部门自行完成。因为不同的语言由不同的特性,因此实现多态的方式也会不一样。我们重点来看下php的实现:

    <?php
    abstract class employee { 
             abstract function working();
      }
    class teacher extends employee {
           public function working() {
                  echo '教书';
           }
    }
    class coder extends employee {
           public function working() {
                  echo '敲代码';
           }
    }
    
    function doprint($obj) {
          if (get_class($obj) == 'employee') {
                            echo 'Error';
          } else {
                       $obj->working();
          }
    }
    doprint(new teacher());
    doprint(new coder());
    doprint(new employee());
    

    看到这里,有同学可能会说那我可以直接调用coder类或者teacher类的working()方法,岂不是更快?,确实是可以,但是这种调用方法不是我们要说的多态。
    思考:
    1.其他语言多态的实现方式,比如C,C++,Java

    相关文章

      网友评论

        本文标题:面向对象的特征是什么?

        本文链接:https://www.haomeiwen.com/subject/yrpiactx.html