zoukankan      html  css  js  c++  java
  • php--有限继承

    思考:类中有三大类成员:属性,方法和类常量,还有访问修饰限定符限制,那么继承是子类可以使用父类所有成员吗?

    引入:从理论上讲,继承后子类是可以访问父类的所有成员的,但实际上父类有一些成员并不希望被子列访问的,所以继承是有限的

    有限继承【掌握】

    定义 :有限继承,指子类在继承父类的成员的时候,并非继承所有内容,而是继承并使用父类的部分内容

      1.继承内容:php中继承是子类继承父类所有的公有成员,受保护成员和私有属性,不能继承父类的私有方法

    <?php
    class posen{
        protected $age=30;
        public $sex="女";
        private $count=100;
    
        public function show(){
            echo $this->count;
        }
    
        private function inbox(){
            echo '我是不能被继承的';
        }
    }
    
    class man extends posen{
        public function add(){
            echo $this->age;    //其中age 也是继承了posen的属性
        }
    }
    
    
    $s=new man();
    $s->show();   //输出100
    $s->add();   //输出30
    $s->inbox();   //语法直接就报错了
    ?>

    注意:虽然子类可以通过以上方式来实现访问父类的私有成员(包含私有方法),但是从设计的意义上讲,私有就是不允许外部访问,所以父类通常不会提供对外访问接口,以上案例只是

    为了知识说明。

      4.静态成员(类常量)也遵循继承规则(php继承本质是对象),只是访问方式由类进行访问

    <?php
    class posen{
        protected static $age=30;
        public static $sex="女";
        private static $count=100;
    
        public static function show(){
            echo self::$count;
        }
    
        private static function inbox(){
            echo '我是不能被继承的';
        }
    }
    
    class man extends posen{
    
    }
    echo man::$sex;   //用man继承了posen下的静态属性,调用也是用man
    man::show();
    
    
    ?>

    5.构造方法和析构方法也可以被子类继承,此时需要注意子类对象实例化时,对应的父类构造方法的参数

    <?php
    class posen{
     private $count;
     public function __construct($s){
         $this->count=$s; 
     }
     public function __destruct(){
        echo 'die';
     }
    }
    
    class man extends posen{
    
    }
    
    //$s=new man();   //子类实例化,自身是空类,没有指定构造函数 报错
    //因为继承父类的构造函数是有参数的,所以以上方法是错误的
    
    $s=new man(100);  //正确的调用
    
    
    ?>

    总结:  

      继承是有限继承,理论上是用来继承父类允许被继承的部分,即使用public或者protected修饰的成员

      因为对象的属性是保存在对象内存空间,所以父类的私有属性也会被继承

      父类私有成员本质不允许被子类访问,但是可以通过父类开放接口实现(一般不会这么做)

      静态成员也可以遵循继承规则

      构造方法也可以被继承,因此在实例化子类对象的时候,要考虑到父类构造方法所使用到的参数问题

  • 相关阅读:
    【HDU3480】Division-DP+四边形不等式优化+贪心
    【HDU3480】Division-DP+四边形不等式优化+贪心
    【NOI2015T2】软件包管理器-树链剖分维护路径和子树信息
    【NOI2015T2】软件包管理器-树链剖分维护路径和子树信息
    【APIO2011T1】方格染色-并查集+位运算推导
    【APIO2011T1】方格染色-并查集+位运算推导
    【NOI2016T4】区间-线段树+离散化+决策单调性优化
    【NOI2016T4】区间-线段树+离散化+决策单调性优化
    【NOI2010T4】航空管制-拓补排序+贪心
    BZOJ 1753 Who's in the Middle
  • 原文地址:https://www.cnblogs.com/xiaowie/p/12287875.html
Copyright © 2011-2022 走看看