kingov-php类的继承,访问权限修饰符,重写,构造函数和析构函数在继承中,最终类,最终方法

    xiaoxiao2021-03-25  102

    继承 基本概念访问权限修饰符 publicprotected 受保护的private 私有的总结parent 代表父类 构造和析构方法在继承中的表现重写最终类 final class最终方法 final method

    继承

    基本概念

    继承,一个类从另一个已有的类获得其特性,成为继承;派生,从一个已有的类产生一个新的类,成为派生继承和派生,其实只是从不同角度表述,本质是一个事情父类/子类,已有类为父类,新建类为子类单继承,一个类只能从一个上级类继承其特性信息。php和大多数面向对象的语言都是单继承,c++是多继承扩展:在子类中再定义自己的一些新的特有的特性信息(属性,方法,常量)。没有扩展,继承也就没有意义 class Person { public $head = '我有大脑' ; } class Teacher extends Person { public $skill = '我会教书' ; function say (){ echo $this->head ; echo $this->skill ; } } $t1 = new Teacher() ; $t1->say() ; //我有大脑我会教书

    访问(权限)修饰符

    在类中的成员,通常都可以在前面加上以下3个修饰符: public protectedprivate

    public

    用该修饰符修饰的成员,可以在任何位置使用和访问 对象->成员 ; 类名::成员;

    访问位置分为3个

    某个类内部某个类的具有继承关系的子(父)类的内部,只是其他类在某个方法中某个类的外部:一般就是独立的代码区(不在类中)

    protected 受保护的

    protected修饰的成员,可以在当前类或当前类的上下级具有继承关系的类中访问

    private 私有的

    private修饰的成员,只能在其所在的类中访问;

    总结

    parent 代表父类

    对比:self代表本类(自己当前类) parent通常用于在子类中调用父类的成员的时候使用,多数就是使用父类的静态成员。parent代表类,而非对象

    构造和析构方法在继承中的表现

    子类中没有定义构造方法时,会自动调用父类的构造方法,因此实例化子类时,需按照父类的构造方法的形式进行子类定义了自己的构造方法,则不会自动调用父类的构造方法,但可以手动调用parent::__construct() ;子类中没有定义析构方法时,会自动调用父类的析构方法;子类定义了自己的析构方法,则不会自动调用父类的析构方法,但可以手动调用parent::__destruct()

    重写

    重写又叫覆盖,就是将父类继承下来的属性或方法重新定义,只有保护的或公有的属性或方法能够被覆盖。重写的原因是父类的某个属性可能对于子类来说不够具体或详细,子类想要同样特性或功能重写的基本要求:访问控制权限,方法的参数形式。私有属性和私有方法的重写问题,私有属性和方法不能覆盖,但其实子类可以定义跟父类私有的同名属性或方法,只是当做一个自身的新属性或方法来看待而已,不过方法的参数必须一致构造方法的重写问题,构造方法不但可以像其他普通方法一样重写,而且,比普通方法更宽松,重写的时候参数可以不一致。

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

    最终类 final class

    通常一个类,没有特别声明的话,则‘别人’就可以随意拿过来使用并对之进行‘扩展’–继承。 但是,如果某个类不希望对其进行扩展,则可以将其声明为‘最终类’ 形式: fina class 类名{ … }

    最终方法 final method

    通常一个方法,如果没有特别声明,则下级类就可以对其进行重写。 但是,如果某个方法不希望被下级类重写,就可以对其声明为‘最终方法’; 形式: final function 方法名(){ … }

    转载请注明原文地址: https://ju.6miu.com/read-6450.html

    最新回复(0)