【发布时间】:2012-12-17 19:32:09
【问题描述】:
我在 Java 中有一个 A 类,A 有一些受保护的方法,然后我有一个 B 类,其中 extends 来自 A,因此 B 可以覆盖这些受保护的方法。然后,我希望能够从类B 中拥有一个C 类extends,但类C 不应该能够调用A 的受保护方法。在 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?
}
}
【问题讨论】:
-
是的,你做对了。你为什么不简单地尝试一下呢?而且你不应该在类名后面有括号。
-
为什么在类名旁边有一个()?这有效吗(我懒得尝试:D)?
-
我相信不可能重写一个方法并突然使它成为
final。那将是非法覆盖,因为在编译器眼中它不是同一个方法,但它也无法从方法调用中区分调用哪个方法。因此:无效。 (我不太确定,需要检查一下。) -
@LewsTherin,是的,很抱歉...这不是我的实际代码,eclipse 为我生成类定义,所以我没有类标题的代码...我想我需要更频繁地在文本编辑器中开始编程,这样我才不会太懒:)
-
@11684 不,这是错误的,您可以覆盖一个方法并使其成为最终方法。这在定义接口中的方法时很有用,然后您在抽象类中提供
final实现,以便在所有子类中都可以使用完全相同的行为。这个final方法可能会调用我们不能调用的hooks来允许自定义方法。
标签: java inheritance polymorphism