如何在同一个包中隐藏类方法

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的超集。

【讨论】:

以上是关于如何在同一个包中隐藏类方法的主要内容,如果未能解决你的问题,请参考以下文章

Java内部类是如何实现的

内部类

Java内部类

java内部类

作业2

eclipse 同一个包下两个类之间 如何调用?