class  animal{
private function cry($name){
echo "动物叫唤";
}
}
class cat extends animal{
public function cry(){
echo "猫猫叫唤";
}
}
这样会报错:为什么?private无法继承,都无法继承了,还能重写吗,是不是只要方法名不一样,参数个数不一样就错class  animal{
final public  function cry(){
echo "动物叫唤";
}
}
class cat extends animal{
public function cry(){
echo "猫猫叫唤";

}
}
这样还是报错,方法名跟参数个数都一样,无法被继承class  animal{
private function cry(){
echo "动物叫唤";
}
}
class cat extends animal{
public function cry(){
echo "猫猫叫唤";

}
}
这样就对了....玩我呢。

解决方案 »

  1.   

    出错时,你应认真阅读错误信息
    1、Strict Standards: Declaration of cat::cry() should be compatible with animal::cry($name)
    是说,继承时参数应该是兼容的:cat::cry() 没有参数,而 animal::cry($name) 有参数,这就是不兼容了2、Fatal error: Cannot override final method animal::cry() 
    final public  function cry(){
    定义方法时有 final 声明,final 是最终的意思,也就是不可继承的意思这都是自己给自己上的套
      

  2.   

    final public  function cry(){
    echo "动物叫唤";
    }final 关键字定义的方法不能被继承。
    如果我们希望某个方法,比如计算个人所得税的方法,不能子类改写,(不希望该方法被子类中方法重载   )可以使用fianl 来修饰方法
      

  3.   

    class  animal{
    private function cry($name){
    echo "动物叫唤";
    }
    }
    class cat extends animal{
    public function cry(){
    echo "猫猫叫唤";
    }
    }这个参数数量不兼容,所以不能重写。