加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 与C相反,为什么在覆盖时不能缩小方法可见性?

发布时间:2020-12-15 05:03:26 所属栏目:Java 来源:网络整理
导读:参见英文答案 Java,Cannot reduce the visibility of the inherited method from object????????????????????????????????????8个 以下程序失败: abstract class A { protected void method() {}}class B extends A { private void method() {}}public clas
参见英文答案 > Java,Cannot reduce the visibility of the inherited method from object????????????????????????????????????8个
以下程序失败:

abstract class A {
  protected void method() {}
}

class B extends A {
  private void method() {}
}

public class main{
     public static void main(String []args) {}
}

有:

main.java:6: error: method() in B cannot override method() in A
  private void method() {}
               ^
  attempting to assign weaker access privileges; was protected
1 error

将派生方法设置为protected / private.

问题:Java不允许您进一步限制子类中的访问权限的原因是什么?我将此与C形成对比,后者具有完全相反的规则.

解决方法

在Java中,默认情况下所有方法都是虚拟的(私有和静态方法除外).因此,在使用Java重写方法时,它必须使用对象引用的类中的定义.通过Java中的这个规则,您无法缩小被覆盖方法的可见性,只需保持相同的可见性或扩大它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读