有没有办法禁止子类在java中调用超类的公共方法?
有没有办法禁止子类在java中调用超类的公共方法 比如说有没有办法禁止子类在java中调用超类的公共方法?,java,Java,有没有办法禁止子类在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 ext
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.
但是我不希望狗能叫super.quark()而且我也不想改变
夸克方法在动物到私人中的修饰符。有什么方法可以防止编译时出现这种情况吗
我已经迷茫了几天了,谁能帮我
我这样做的原因是我在开发hudson scm插件时遇到了类似的问题
创建了扩展SubversionSCM的类(Official类)。我只是想
重写super类的public方法,然后像
例如。但是编译出了错误。我不知道为什么,怎么会这样?爪哇有吗
类似于的反射方式可以防止这种情况发生?不,没有办法拥有子类无法调用的公共方法。您所能做的最好是将此建议记录下来
请注意,它被称为子类或子类。否,根据
public
的定义,您无法阻止调用该方法(无论是从派生类还是其他任何地方)。当然,您可以通过将其设置为final
来阻止它被重写(从而确保用于调用它的语法不会使用super
;-),其他两个答案(&基本正确)
class Father
{
private class Alpha { }
private class Beta { }
public void fatherMethod ( Alpha param )
{
}
public void fatherMethod ( Beta param )
{
}
}
您可以使用
super
调用final方法。没有真正的理由这么做,但这是允许的。首先感谢您的回复。在实际情况下,我无法更改类Animal中的任何内容,因为它是由其他人编写的。简短回答,不要这样做;如果您需要此功能,则说明您的设计有缺陷。请发布编译错误另外,请在报告错误的地方发布代码行。我这样做的原因是我在开发hudson scm插件时遇到了类似的问题。我创建了一个扩展SubversionSCM(Official类)的类.我只想重写super类的public方法,然后像示例一样调用super的public方法。但是编译时出现了错误。我不知道为什么,它是怎么做的?java是否有类似反射的方法来防止这种情况发生?超类方法是最终的吗?RU重写了它吗?它是静态的吗?它是泛型的吗?您是否仔细检查了参数ter types?双重检查名称?是否引发异常?子类不是最终的和静态的,我可以重写public方法,但不能在重写方法中调用super方法..你是否将@override标记放在该方法上?我怀疑你没有真正重写public方法。如果你在该方法上有@override标记,并且它不是编译器会告诉你,java是否有类似于反射的方法来防止这种情况发生?