因此,我有一个名为ABC的类A,类B和类C的程序包。现在,我的主类在该程序包之外,并调用一个名为show()的A类方法,该方法是一个公共静态方法。基本上,A类就像包ABC的网关一样。现在我有了C类,扩展了B类,并且在B类中有一个称为execute()的抽象方法,该抽象方法在C类中被覆盖。现在execute()的访问修饰符受到保护。现在,我无法从main中访问execute(),但是我仍然可以从A类访问它,因为它在同一包中。如何在同一个程序包中隐藏执行,即如何在A类中隐藏execute()但仍然能够在C类中访问它?
不幸的是,Java没有相应的可见性修饰符,受保护的是package-private的超集。
[从A类隐藏execute()
的唯一方法是在C类中使其成为private
。但是由于execute()
是B类中的抽象方法,因此此组合是非法的(private
+ [ C0])。即使将其设置为受保护的,也不能覆盖它,并使其成为类B中的abstract
,如本示例所示:
private
和:
abstract class B
{
protected abstract void execute();
}
因为重写方法时分配较弱的访问权限是非法的。