A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王健 中级黑马   /  2012-8-19 15:30  /  2091 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么重写时,子类方法的权限要大于等于父类方法的权限???

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 功德圆满

查看全部评分

6 个回复

倒序浏览
这个,我看了下李兴华的java开发实战经典,里面就说“被覆写的方法不能拥有更严格的权限”,但没有讲原理------------
回复 使用道具 举报
如果子类权限小于父类的权限,使用多态时,父类就无法调用方法,如下面的代码
  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. }
复制代码
回复 使用道具 举报

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

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

所以说这是一个规定
子类不能降低父类方法的访问权限,只能大于等于父类中多态方法的访问权限,这是一个规定。
回复 使用道具 举报
在父类中是public的方法,如果子类中将其降低访问权限为private,那么子类中重写以后的方法对于外部对象就不可访问了,这个就破坏了继承的含义
回复 使用道具 举报
这个问题你可以这么考虑啊。主函数是一间屋子,而你就是子函数要进入这间屋子,权限就是这个屋子的门。
你要是进入这间屋子的话 ,你要是太胖,比门宽 ,你说怎么进去,所以是你只能是比这个门小或
者是一样的白。才能进去访问
回复 使用道具 举报
黄阔 初级黑马 2012-8-19 22:00:23
7#
改变了就达不到重写了,就达不到多态要的效果了。。没有重写的意义了。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马