zoukankan      html  css  js  c++  java
  • 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中的构造函数"."
    ";
        }
    
        protected function Say()
        {
            echo "这是父类Person中的say()"."
    ";
        }
    }
    
    /**
    * Chinese
    */
    class Chinese extends Person
    {
        function __construct($name,$age,$sex)
        {
            parent::__construct();//显式调用父类的构造函数
            //Person::__construct();
            echo "这是子类Chinese中的构造函数"."
    ";
            $this->name=$name;
            $this->age=$age;
            $this->sex=$sex;
        }
    
        public function Say()    //对父类方法的重写
        {
            echo "我是中国人,我叫:".$this->name.",今年:".$this->age."岁了".",性别:".$this->sex."
    
    ";
        }
    
        private function Work()
        {
            echo "我是中国人,我在耕田"."
    
    ";
        }
    }
    
    /**
    * Chinese
    */
    class Bejing extends Chinese
    {
        function __construct($name,$age,$sex)
        {
            parent::__construct("","","");//显式调用父类的构造函数
            //Person::__construct();
            echo "这是子类Bejing中的构造函数"."
    ";
            $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."
    
    ";
        }
    }
    
    /**
    * English
    */
    class English extends Person
    {
        function __construct($name,$age,$sex)
        {
            echo "这是子类English中的构造函数"."
    ";
            $this->name=$name;
            $this->age=$age;
            $this->sex=$sex;
        }
    
        public function Say()    //对父类方法的重写
        {
            echo "我是英国人,叫:".$this->name.",今年:".$this->age."岁了".",性别:".$this->sex."
    
    ";
        }
    }
    
    //调用:
    $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岁了,性别:男
    ?>
  • 相关阅读:
    【转】extern "C"的含义和用法
    python的shelve库
    【转】TCP是流传输协议,UDP是包传输协议
    【转】TCP慢启动、拥塞避免、快速重传、快速恢复
    【转】C/C++多线程编程中什么情况下需要加volatile?
    【转】C++对象是创建在堆上,还是在栈上?
    【转】腾讯高级工程师:一道面试题引发的高并发性能调试思考
    【转】C++类的sizeof大小
    【转】C编译器内存对齐
    【转】c++中使用memset初始化类对象
  • 原文地址:https://www.cnblogs.com/lt-style/p/3498629.html
Copyright © 2011-2022 走看看