首页 > 解决方案 > 如何在同一个包中隐藏类方法

问题描述

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

标签: javainheritanceaccess-modifiers

解决方案


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

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

和 :

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

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


推荐阅读