PHP基础之 继承(一)

 

=========================================
*                 继承 extends
*=========================================
*1.PHP只支持类单继承,但可以继承多个接口
*2.只继承父类公有和受保护的成员
*3.重写Overwritte:子类中的方法名如果和父类的方法名相同,则会重写父类的方法
*4.子类重写父类的方法时,方法访问修饰符不能低于父类中方法的修饰符
*5.子类如果要调用父类的构造函数,必须显式调用parent::__construct();/Person::__construct();
*/

/**
* Person
* 这个例子:
* 子类继承了父类,同时继承了public和protected成员的方法和属性,但不能继承private成员
* 调用了父类的构造函数
* 重写了父类的方法say()
*/

<?php
class Person
{
    public $name;
    public $age;
    public $sex;

    function __construct()
    {
        echo "这是父类Person中的构造函数"."\n";
    }

    protected function Say()
    {
        echo "这是父类Person中的say()"."\n";
    }
}

/**
* Chinese
*/
class Chinese extends Person
{
    function __construct($name,$age,$sex)
    {
        parent::__construct();//显式调用父类的构造函数
        //Person::__construct();
        echo "这是子类Chinese中的构造函数"."\n";
        $this->name=$name;
        $this->age=$age;
        $this->sex=$sex;
    }

    public function Say()    //对父类方法的重写
    {
        echo "我是中国人,我叫:".$this->name.",今年:".$this->age."岁了".",性别:".$this->sex."\n\n";
    }

    private function Work()
    {
        echo "我是中国人,我在耕田"."\n\n";
    }
}

/**
* Chinese
*/
class Bejing extends Chinese
{
    function __construct($name,$age,$sex)
    {
        parent::__construct("","","");//显式调用父类的构造函数
        //Person::__construct();
        echo "这是子类Bejing中的构造函数"."\n";
        $this->name=$name;
        $this->age=$age;
        $this->sex=$sex;

        //parent::Work();//Fatal error: Call to private method Chinese::Work()//不能继承私有的成员
    }

    public function Say()    //对父类方法的重写
    {
        echo "我是北京人,我叫:".$this->name.",今年:".$this->age."岁了".",性别:".$this->sex."\n\n";
    }
}

/**
* English
*/
class English extends Person
{
    function __construct($name,$age,$sex)
    {
        echo "这是子类English中的构造函数"."\n";
        $this->name=$name;
        $this->age=$age;
        $this->sex=$sex;
    }

    public function Say()    //对父类方法的重写
    {
        echo "我是英国人,叫:".$this->name.",今年:".$this->age."岁了".",性别:".$this->sex."\n\n";
    }
}

//调用:
$p1 = new Chinese("杰克",19,"男");
$p1->Say();

$b1 = new Bejing("小王",19,"女");
$b1->Say();

$p2 = new English("jack",24,"男");
$p2->Say();

//输出结果>>>:
// 这是父类Person中的构造函数
// 这是子类Chinese中的构造函数
// 我是中国人,我叫:杰克,今年:19岁了,性别:男

// 这是父类Person中的构造函数
// 这是子类Chinese中的构造函数
// 这是子类Bejing中的构造函数
// 我是北京人,我叫:小王,今年:19岁了,性别:女

// 这是子类English中的构造函数
// 我是英国人,叫:jack,今年:24岁了,性别:男
?>
posted @ 2013-12-30 23:19  TOGGLE  阅读(202)  评论(0编辑  收藏  举报