有没有办法禁止子类在java中调用超类的公共方法?
例如
public abstract class TObject{
abstract public void quark();
}
public class Animal extends TObject{
public void quark(){
System.out.println("this is the animal");
}
}
public class Dog extends Animal{
@overide
public void quark(){
System.out.println("this is the animal");
**super.quark();**
}
}
In this example, The Dog call the **super.quark();** in it's quark method.
但我不希望Dog可以调用 super.quark(); 而我也不想改变
动物中的夸克方法的修饰符为私有。有没有办法在编译中阻止这种情况?
我有几天困惑,谁能帮助我........
我这样做的原因是我在开发 hudson scm插件时遇到了类似的问题.I
创建了扩展SubversionSCM(官方类)的类。我只是想
覆盖超类的公共方法,然后调用super的公共方法,如
例子。但编译给出了错误。我不知道为什么,怎么办?剂量java有
类似反映方式以防止这种情况?
答案 0 :(得分:5)
不,根据public
的定义,您无法阻止调用该方法(无论是派生类还是其他任何方法)。您当然可以阻止它被覆盖(从而确保用于调用它的语法不会使用super
;-)使其成为final
。
答案 1 :(得分:2)
不,没有办法让子类无法调用公共方法。你能做的最好的就是记录这个建议。
作为一个注释,它被称为子类或子类。
答案 2 :(得分:0)
其他2个答案(Alex& Matthew)基本上是正确的。
下面的Father类有两个名为fatherMethod的公共方法。子类可以使用反射调用fatherMethod(谢谢Matthew指出这一点。)不使用反射,子类可能无法调用fatherMethod方法。因此它与私有方法非常相似。
class Father
{
private class Alpha { }
private class Beta { }
public void fatherMethod ( Alpha param )
{
}
public void fatherMethod ( Beta param )
{
}
}