如何在同一个包中隐藏类方法
Posted
技术标签:
【中文标题】如何在同一个包中隐藏类方法【英文标题】: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 【参考方案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的超集。
【讨论】:
以上是关于如何在同一个包中隐藏类方法的主要内容,如果未能解决你的问题,请参考以下文章