【问题标题】:How can prevent the son class call public method of super class in java? [duplicate]java中如何防止子类调用超类的公共方法? [复制]
【发布时间】:2011-04-11 11:21:12
【问题描述】:

可能重复:
Is there any way to forbid the son class to call the public method of super class in java?

前几天,我在为hudson开发插件(一个继续集成工具)的时候,遇到了这个

问题。我创建了扩展 SubversionSCM 的类(官方类)。我只是

想覆盖超类的公共方法,然后像这样调用超类的公共方法

例子。但是编译给出了错误。我不知道为什么,它怎么办?

实际情况如下例。

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();**
       }
} 

在这个例子中,The Dog 在它的 quark 方法中调用了 super.quark();

但我不希望 Dog 可以调用 super.quark();Animal 类是由

其他,所以无法更改.....

谁能帮帮我?

【问题讨论】:

标签: java plugins hudson


【解决方案1】:

关于您的第一个问题:如果您要覆盖标记为 final 的内容(类或方法),编译器会产生错误。

至于第二个你可以干涉反射。例如,如果您是 TObject 的作者,并且不希望任何人扩展您的类超过一个节点,您可以执行以下操作:

public class BaseClass {
  public void apiMethod() {
    if(check(0, getClass()) > 1) {
      throw new IllegalStateException("Too much inheritance");
    }
  }
  private int check(int prev, Class c) {
    if(c.equals( BaseClass.class)) {
      return prev; 
    }
    else { 
      return check(++prev, c.getSuperClass());
    }
  }
}

但那会是偷偷摸摸的......

【讨论】:

  • 也许这是一个很好的解决方案。谢谢
猜你喜欢
  • 2017-02-27
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
  • 2017-08-27
  • 2015-03-07
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
相关资源
最近更新 更多