美文网首页
php的类继承extends及重写方法

php的类继承extends及重写方法

作者: PENG先森_晓宇 | 来源:发表于2019-12-25 16:57 被阅读0次
  • php类是单继承,也就是一个类最多能继承一个类,使用extends关键字来继承。
  • 子类会继承父类中所有属性和方法,包括继承父类的**静态变量和静态方法。也就是父类中的所有属性和方法都将会被子类继承,相当于copy一份到子类

子类怎么算重写父类方法?

子类可以覆盖父类的属性和方法,当子类中出现和父类中同名的属性或者方法即为重写(覆盖),重写父类方法时要注意必须和父类方法的参数也要一致,方法修饰符可以不一样

父类中private会被子类继承吗?
首先在子类中是肯定访问不到父类中的private属性和方法的,那么就是子类不继承父类的private属性和方法呗。

答案是错的。

必须明确:private,publicprotected这几个关键字,和继承一毛钱的关系都没有。人家叫做“可见性(Visibility)”。基类不能控制自己的所有成员都被子类继承走,但可以约束某些被继承的的成员(private),在子类中的不可见。

从“拥有”这个角度来说,子类是基类的套壳,基类的一切当然都在子类中“存在”,只是从子类的角度能不能“看得到”而已。也就是说父类中的一切都会被子类所继承,只不过私有成员在子类中看不到而已。

如下图(蓝色箭头部分),private member肯定存在在子类的存储空间中,也就是说肯定被子类继承到了。但子类新增的方法就是访问不到

image

这个事情从架构设计这个意义上,其实是很容易说清楚的。一个子类必须遵守基类的所有特征,然后在其上做出增补和扩充。而如果基类的所有成员都开放给子类随便看、随便改,基类的本来特征可以随便拆掉,那么还要继承做什么呢?

在实际工程中,基类的私有成员,有俩个作用

  • 要么是基类自己内部使用,
  • 要么是像上图(红色箭头部分)一样,通过protected方法做一个访问器,保证既把访问权间接开放给子类,又能在子类访问时执行一些必要的控制逻辑。

相关文章

网友评论

      本文标题:php的类继承extends及重写方法

      本文链接:https://www.haomeiwen.com/subject/svucoctx.html