黑马程序员技术交流社区

标题: 关于重写的一点疑问 [打印本页]

作者: 王健    时间: 2012-8-19 15:30
标题: 关于重写的一点疑问
为什么重写时,子类方法的权限要大于等于父类方法的权限???
作者: 黑马王建伟    时间: 2012-8-19 15:51
这个,我看了下李兴华的java开发实战经典,里面就说“被覆写的方法不能拥有更严格的权限”,但没有讲原理------------
作者: 贾林栋    时间: 2012-8-19 16:05
如果子类权限小于父类的权限,使用多态时,父类就无法调用方法,如下面的代码
  1. class Fu
  2. {
  3.       public void method()
  4.       {}
  5. }
  6. class Zi extends Fu
  7. {
  8.     private void method()
  9.     {
  10.           System.out.println("a")
  11.     }
  12. }
  13. class Demo
  14. {
  15.       Fu z=new Zi();
  16.     z.method;
  17. }
复制代码

作者: 王舜民    时间: 2012-8-19 16:16

如果父类提供了一个方法,但是子类中限制了这个方法的访问权限,那么这种替换功能就无法实现了.

父类应该在任何情况下替换成子类.但如果你的父类的方法是public,而你在子类重写的时候改成了private,当在别的场合人家用父类引用你的子类的方法的时候,系统应该怎么办呢?(private是不能被访问到的)这样做会给多态性的编程原则带来矛盾.(csdn转)

所以说这是一个规定
子类不能降低父类方法的访问权限,只能大于等于父类中多态方法的访问权限,这是一个规定。
作者: 杨彪    时间: 2012-8-19 17:13
在父类中是public的方法,如果子类中将其降低访问权限为private,那么子类中重写以后的方法对于外部对象就不可访问了,这个就破坏了继承的含义
作者: 孙铭泽    时间: 2012-8-19 18:00
这个问题你可以这么考虑啊。主函数是一间屋子,而你就是子函数要进入这间屋子,权限就是这个屋子的门。
你要是进入这间屋子的话 ,你要是太胖,比门宽 ,你说怎么进去,所以是你只能是比这个门小或
者是一样的白。才能进去访问

作者: 黄阔    时间: 2012-8-19 22:00
改变了就达不到重写了,就达不到多态要的效果了。。没有重写的意义了。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2