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

问题描述 投票:1回答:2

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

java inheritance access-modifiers
2个回答
0
投票

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


0
投票

[从A类隐藏execute()的唯一方法是在C类中使其成为private。但是由于execute()是B类中的抽象方法,因此此组合是非法的(private + [ C0])。即使将其设置为受保护的,也不能覆盖它,并使其成为类B中的abstract,如本示例所示:

private

和:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.