您的位置:首页 > 编程语言 > PHP开发

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

2014-12-11 10:35 253 查看
<?php
class 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里传递了 参数这样便会报错了

 <?php
class 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只能本类调用 所以不去考虑)

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

<?php
class a
{
function cry()
{
echo'你哭了';
}

}
class b extends a
{
function cry()
{
echo'你妹的';
a::cry();
}
}
$a=new b();
$a->cry();

?>直接指定父类类名::cry();即可
后续继续补充.....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息