【问题标题】:How to hide a class method within the same package如何在同一个包中隐藏类方法
【发布时间】:2020-06-20 10:54:48
【问题描述】:

所以我有一个名为 ABC 的包,其中包含 A 类、B 类和 C 类。现在我的主类在包之外,并调用了一个名为 show() 的 A 类方法,这是一个公共静态方法。基本上,A 类就像包 ABC 的网关。现在我有 C 类扩展 B 类,并且我在 B 类中有一个名为 execute() 的抽象方法,该方法在 C 类中被覆盖。现在 execute() 的访问修饰符受到保护。现在我无法从我想要的 main 访问 execute() 但我仍然可以从 Class A 访问它,因为它在同一个包中。如何将execute隐藏在同一个包中,即如何在A类中隐藏execute(),但仍然可以在C类中访问它?

【问题讨论】:

  • 你可以将 B 和 C 向下推一个包级别,比如 ABC.BC

标签: java inheritance access-modifiers


【解决方案1】:

你可以在A类中隐藏execute()的唯一方法是在C类中设置private。但是由于execute()是B类中的抽象方法,这种组合是非法的(private + abstract)。即使您将其设置为受保护,您也无法覆盖它并将其设置为 B 类中的 private,如下例所示:

abstract class B 
{
 protected abstract void execute(); 
}

和:

class C
{
 @Override
 private void execute() {} // not working
}

因为在重写方法时分配较弱的访问权限是非法的。

【讨论】:

    【解决方案2】:

    不幸的是Java没有相应的可见性修饰符,protected是package-private的超集。

    【讨论】:

      猜你喜欢
      • 2022-01-04
      • 2011-08-15
      • 1970-01-01
      • 2012-12-15
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 2016-07-22
      相关资源
      最近更新 更多