日期:2014-05-20  浏览次数:20994 次

protected String toString()居然不行?
Java code
class A
{
    protected String toString()
    {
        return super.toString();
    }
}

编译出错,不知为何

------解决方案--------------------
当然不行.
把protected改为public
------解决方案--------------------
可见度在继承的时候只能有小变大不能由大变小
因为对象转型原因,做不到。很容易想明白想想类型转换,如果按你想的根本实现不了。按你想的,我可以向上转型破解限制。
 

------解决方案--------------------
以前不是说过了么?对于多态,子类Override父类的同名方法时候,有2个要求
1.子类的访问可见性应该不低于父类的访问可见性
2.子类的返回类型应该和父类返回类型相同或者是父类返回类型的子类

你这里覆盖了基类Object的toString方法,而Object中已经是public了,你要可见行不低于它,那么只能public了
------解决方案--------------------

------解决方案--------------------
探讨
以前不是说过了么?对于多态,子类Override父类的同名方法时候,有2个要求
1.子类的访问可见性应该不低于父类的访问可见性
2.子类的返回类型应该和父类返回类型相同或者是父类返回类型的子类

你这里覆盖了基类Object的toString方法,而Object中已经是public了,你要可见行不低于它,那么只能public了

------解决方案--------------------
我们编写的任何一个类,他的终极父类是Object,你这样写就是要覆盖他的toString方法了,覆盖后的方法的访问限制不能比父类的访问限制窄,而Object类的toString方法是public修饰的,所以toString方法只能是 public 。


Like this:

[code=Java]

@Override
public String toString() {
return super.toString();
}

[/code]
------解决方案--------------------
探讨
可见度在继承的时候只能有小变大不能由大变小
因为对象转型原因,做不到。很容易想明白想想类型转换,如果按你想的根本实现不了。按你想的,我可以向上转型破解限制。