php面向对象 之 多态--重写覆盖

来源:互联网 发布:java字符串赋值 编辑:程序博客网 时间:2024/04/29 00:51
<?phpclass a{function cry(){echo'你哭了';}}class b extends a{function cry(){echo'你妹的';}}$a=new b();$a->cry();?>

这里 子类class b 继承了 父类class a;

但是相对的 class b中 有一个cry 方法 所有 这里b实例化后 会优先调用 class b的cry 所以会输出 你妹的;

还有 如果class b要实现覆盖 必须 方法名和传递的参数必须一致 如下 cry里传递了 参数这样便会报错了

 

<?phpclass a{function cry(){echo'你哭了';}}class b extends a{function cry($a){echo'你妹的';}}$a=new b();$a->cry();?>
此时 class b中 方法便被改变掉了 默认不会和父类 class a中的覆盖 但是 又由于 class b中 已经继承了 class a所以 class b 里面会出现两个名称一样的方法

即 cry();cry($a) 同一个类中出现两个相同的方法 所以会报错;

(ps【如果子类想覆盖父类的方法 子类的权限必须大于父类的权限 即 若父类为protected function cry(),子类必须为 public function cry()】;private只能本类调用 所以不去考虑)

如果子类已经重写或覆盖 父类方法后 还想调用父类的方法 则可以

<?phpclass a{function cry(){echo'你哭了';}}class b extends a{function cry(){echo'你妹的';a::cry();}}$a=new b();$a->cry();?>
直接指定父类类名::cry();即可

后续继续补充.....

0 0
原创粉丝点击