• 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岁了,性别:男
    ?>
  • 相关阅读:
    visual studio 2013运行时卡顿 CPU占用超50%的解决方法
    altium designer中Net Label 使用说明
    机器学习中的目标函数、损失函数、代价函数
    我的Android天气app
    序列交换
    挑战多重部分和问题
    kmp算法模式串匹配
    poj3259
    poj3255
    Redis工具类 单机+集群
  • 原文地址:https://www.cnblogs.com/lt-style/p/3498629.html
Copyright © 2020-2023  润新知