3

A我在 Java中有一个类并且A有一些受保护的方法,然后我有一个可以覆盖这些受保护方法的类。然后我希望能够拥有一个来自类但类不应该能够调用受保护方法的类。在 Java 中可以做到这一点吗?我只是让父类的方法被覆盖并让它们成为最终的吗?igBextendsABCextendsBCA

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?
    }
}
4

3 回答 3

3

不,您不能阻止子类调用父类的protected方法。为此,您必须降低方法的可见性,这是​​不允许的。final在您的类中创建该方法B仅意味着它不能在任何子类中被覆盖。

您希望禁止调用子类的方法这一事实protected对我来说似乎是一个设计问题。您可能想查看整个类层次结构的方式,并可能更好地隔离类的责任,这样您就不会陷入必须阻止通常允许的情况(调用protected方法)的情况。

于 2012-12-17T19:48:49.167 回答
1

如果 B 覆盖受保护的方法以防止 C 访问在 A 中实现的方法就足够了。然后 C 将只能访问在 B 中实现的方法。看看Java如何调用祖父母的方法?.

于 2012-12-17T20:00:07.933 回答
1
//How do I make some variable final or not accessible to my children?

为此,您可以将变量设为 privatefinal

private final int COUNT = 100;

私有访问器将阻止您的变量 COUNT 被子类访问。

于 2012-12-17T19:36:05.823 回答