zoukankan      html  css  js  c++  java
  • 重写override

    重写又叫覆盖,就是将从父类继承下来的属性或方法重新“定义”——就是从新写。

    但注意:子类覆盖父类的方法,虽然可以去调用父类的同名方法去完成一定的工作,但不是必须的。也有可能父类的该方法所执行的结果并不适合子类,此时子类就去完全自己写了。

    重写的基本要求:

    访问控制权限

    下级的访问控制权限应该不低于上级的访问控制权限:

    上级:public  下级:只能public

    上级:protected  下级: protected, public

    上级:private   下级:private  protected  public——实际此情况无意义。

    私有的不能覆盖,而是完全当作自己全新的。

    方法的参数形式

    应该跟父类的一致。

    //重写
    //class teacher{
    // public $name = "张三";
    // public $age = "20";
    // public $subject = "语文";
    // function intro(){
    // echo "My".$this->name."age".$this->age;
    // }
    //}
    //class student extends teacher{
    // public $name = "李四";
    // public $age = "25";
    // public $sex = "男";
    // function intro(){
    // echo "My".$this->name."age".$this->age."sex".$this->sex;
    // }

    构造方法的重写问题:构造方法不但可以像其他普通方法一样重写,而且,比普通方法更宽松:重写的时候参数可以不一致。

    最终类final class

    通常,一个类,没有特别声明的话,则“别人”就可以随意拿过来使用并对之进行“扩展”——继承。

    但是:

    如果某个类不希望对其进行扩展,则可以将其声明为“最终类”。

    形式:

    final  class  类名{ 。。。。类定义。。。。}

    最终方法final method

    通常,一个方法,如果没有特别声明,则下级类就可以对其进行“覆盖”(重写)。

    但是:

    如果某个方法不希望被下级类覆盖,就可以对其生命为“最终方法”。

    形式:

    final  function  方法名(){。。。。方法定义。。。。}

    //final,不能被继承、重写、调用
    final class teacher{
    public $name = "张三";
    public $age = "20";
    public $subject = "语文";
    final function intro(){
    echo "My".$this->name."age".$this->age;
    }
    }
    class student extends teacher{
    public $name = "李四";
    public $age = "25";
    public $sex = "男";
    function intro(){
    echo "My".$this->name."age".$this->age."sex".$this->sex;
    }
    }
    $stu = new student();
    $stu->intro();

    工厂模式

    在实际应用中,我们总是需要去实例化很多很多的类——以得到对象。

    则:

    我们可以设计出一个“工厂”(其实就是类),该工厂的作用(任务)就是为人们“生产”各种对象。这种工厂通常只要指定类名,就可以据此获取一个该类的对象。

    class factory{

    //Instance表示“实例”,“对象”

    static function getInstance($className){

    if(file_exists('./class/' . $className . ".class.php")){

    $obj1 = new $className();

    return $obj1;

    }

    else{

    return null;//也可以die();

    }

    }

    }

    $obj1 = factory::getInstance("A");//获取类A的一个对象

    $obj2 = factory::getInstance("B");//获取类B的一个对象

    $obj3 = factory::getInstance("A");//再获取类A的一个对象

  • 相关阅读:
    2021,6,10 xjzx 模拟考试
    平衡树(二)——Treap
    AtCoder Beginner Contest 204 A-E简要题解
    POJ 2311 Cutting Game 题解
    Codeforces 990G GCD Counting 题解
    NOI2021 SDPTT D2T1 我已经完全理解了 DFS 序线段树 题解
    第三届山东省青少年创意编程与智能设计大赛总结
    Luogu P6042 「ACOI2020」学园祭 题解
    联合省选2021 游记
    Codeforces 1498E Two Houses 题解 —— 如何用结论吊打标算
  • 原文地址:https://www.cnblogs.com/loveMis/p/8514594.html
Copyright © 2011-2022 走看看