繁体   English   中英

有什么方法可以禁止子类在Java中调用父类的公共方法?

[英]Is there any way to forbid the son class to call the public method of super class in 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 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的类(正式类)。 我只是想

覆盖超类的公共方法,然后像

例。 但是编译产生了错误。我不知道为什么,怎么办? 剂量java有

类似反射方式来防止这种情况?

不,根据public的定义,您不能阻止该方法的调用(无论是从派生类还是在其他任何地方)。 您当然可以通过将其设为final来阻止其被覆盖 (从而确保用于调用它的语法不会使用super ;-)。

不,没有办法拥有子类无法调用的公共方法。 您能做的最好的就是记录此建议。

注意,它称为子类或子类。

其他两个答案( 亚历克斯马修)基本上是正确的。

  1. 您可以防止子类从超类调用公共方法
  2. 如果这样做,您的设计可能存在问题。

下面的父亲类具有两个名为父亲方法的公共方法。 子类可以使用反射调用父亲方法(谢谢马修指出)。如果不使用反射,子类可能无法调用任何父亲方法。 因此,它与私有方法非常相似。

class Father
{
    private class Alpha { }

    private class Beta { }

    public void fatherMethod ( Alpha param )
    {
    }

    public void fatherMethod ( Beta param )
    {
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM