cannot reduce the visibility of the inherited method from xxx原因及解决方法

cannot reduce the visibility of the inherited method from xxx
意思为:无法降低从xxx继承的方法的可见性
解决这个问题,我们先需要明白对于类和接口中的一个必须知道的知识点:
1、子类重写父类方法时,不能使用比父类中被重写的方法更低的访问权限,如父类中的方法是public时,子类的方法就不能是prvate,但是如果父类是默认的,那么你补上一个public就一定没问题。

2、因为接口定义的方法默认是public的,意思就是你没有任何访问修饰符的情况下,系统给接口的方法加上了一个public的访问修饰符,而public的访问权限非常高。

3、类的默认访问修饰符是freidnly,访问级别比public低,因此和上述2结合之后,如果要重写接口的抽象方法,就必须在重写的方法前补上一个public

错误原因:类继承接口,在重写接口方法时,没有用public定义

情况如下:
生物类:
cannot reduce the visibility of the inherited method from xxx原因及解决方法
动物类:
cannot reduce the visibility of the inherited method from xxx原因及解决方法
人类:cannot reduce the visibility of the inherited method from xxx原因及解决方法
最终实例:
cannot reduce the visibility of the inherited method from xxx原因及解决方法
可以发现没有加上public的think(方法出现了这个问题,而加上public的其他方法都没有出现这个问题,只需要补上一个public就能解决,这是由于默认接口Human他的抽象方法的访问权限都是public,那么我们的访问权限就不能低于public。
当然,这是由于我的接口继承的是Human,如果继承其他两个接口,那么可以不对父接口中不存在的方法进行权限减小,如下:
cannot reduce the visibility of the inherited method from xxx原因及解决方法
可以发现如果将父接口设置为动物类,由于动物类没有earn()和think()这两个方法,因此我在Person类中声明的这两个方法其实就是他自己的方法,与Human类无关。
正确使用情况如下
cannot reduce the visibility of the inherited method from xxx原因及解决方法

上一篇:防止跨框架脚本攻击


下一篇:csss之visibility:hidden和display:none有什么不同?