ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### 概述 重写也叫作覆盖,就是当子类的成员与父类的成员的名字相同的时候,从父类继承下来的成员会重新定义!此时,通过子类的对象访问的时候,真正起作用的是子类中定义的成员! ### 实例 在真实的项目中,一般是可以通过修改方法的名字来避免重写的!但是,有些方法的名字是固定的,比如:构造方法,析构方法等魔术方法,所以,这种情况,重写不可避免! **如果必须要执行被重新的父类方法,必须在子类的方法中,显式的调用父类的同名方法** . ~~~ class Person{ public $name; public function show() { echo "父类"; } } class Stu extends Person{ public function show() { parent::show(); //parent不一定就代表本类的上一级父类,如果父类中没有找到相应的方法,会继续的向更上一级的父类查找! echo "子类"; } } $stu = new Stu(); $stu->show(); ~~~ ~~~ 父类 子类 ~~~ ### 注意 1. 私有成员(私有属性和私有方法)都不能被重写,但是子类还是可以定义跟父类私有成员同名的成员,但是此时,只是当作子类自身的新的成员而已 . 2. 虽然父类的私有方法不能被重写,但是,如果子类重新定义了一个同名的方法的时候,方法参数的形式(参数的个数)还是需要和父类保持一致 .