• 重写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的一个对象

  • 相关阅读:
    web页面常用方法及INI文件的读取方法
    winform 三个Panel左右切换(panel里面填充图片)
    图片渐出轮播的效果
    Winform跑马灯——Graphics运用
    .net 3.5 新功能重写ToInt()方法
    style.display
    SQL: 分页SQL SQL2005函数分页!
    JS: 验证输入必须为数字
    Table 里面点标题会进行排序
    在Div中绑定数据
  • 原文地址:https://www.cnblogs.com/loveMis/p/8514594.html
Copyright © 2020-2023  润新知