<?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();即可
后续继续补充.....