繁体   English   中英

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

[英]How to hide a class method within the same package

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

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

对 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
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM