有限继承

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

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

有限继承【掌握】

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

  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修饰的成员

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

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

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

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

猜你喜欢

转载自www.cnblogs.com/xiaowie/p/12287875.html