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

继承

基本概念

  • 继承,一个类从另一个已有的类获得其特性,成为继承;
  • 派生,从一个已有的类产生一个新的类,成为派生
  • 继承和派生,其实只是从不同角度表述,本质是一个事情
  • 父类/子类,已有类为父类,新建类为子类
  • 单继承,一个类只能从一个上级类继承其特性信息。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
    • protected
    • private

public

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

  • 访问位置分为3个

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

protected 受保护的

protected修饰的成员,可以在当前类或当前类的上下级具有继承关系的类中访问
这里写图片描述

private 私有的

private修饰的成员,只能在其所在的类中访问;
这里写图片描述

总结

这里写图片描述

parent 代表父类

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

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

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

子类继承父类的属性

这里写图片描述

这里写图片描述

重写

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

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

最终类 final class

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

最终方法 final method

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值