我有一个 Java 类 A
并且 A
有一些 protected 方法,然后我有一个 B
类 extends
来自 A
以便 B
可以覆盖那些 protected 方法。然后我希望能够拥有一个 C
类 extends
from class B
但类 C
不应该能够调用 A
的 protected 方法。有没有办法在 Java 中做到这一点?我是否只是让父类的方法被重写并让它们最终化?即
public class A()
{
protected void somemethod();
protected int somevariable;
}
public class B() extends A
{
@Override
final protected void somemethod();
//How do I make some variable final or not accessible to my children?
}
public class C() extends B
{
//Now I cannot override somemethod! Is that right?
}
}
最佳答案
不,您不能阻止子类调用父类的protected
方法。为此,您必须降低方法的可见性,这是不允许的。在您的类 B
中制作方法 final
仅意味着它不能在任何子类中被覆盖。
您希望禁止调用子类的 protected
方法这一事实对我来说似乎是一个设计问题。你可能想回顾一下你的整个类层次结构,也许更好地隔离你的类的责任,这样你就不会陷入必须阻止通常允许的情况(调用 protected
方法) ).
关于Java 孙子对象不允许调用 parent 或祖 parent 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13920852/