[英]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.