Java中强制覆盖的字段

时间:2012-11-22 10:25:51

标签: java inheritance

我还没有找到合适的方法来做到这一点。假设Class Aa继承自Class A。 我的想法是在Aa中重写两个属性,所以当从A调用此函数时,我可以在A的函数中使用这些属性。

Class A {
   String attr;

   public void publicMethod(){
       ....
       callMethod2();
       ....
   }

   protected method2(){
       ....
       whatever = attr;
   }
}

Class Aa extends A{
    //mandatory override?
    attr
}

调用示例:

Aa test = new Aa();
test.publicMethod();

我认为我可以“不强制执行”它会起作用,但是你必须以某种方式设置这个属性并不直观。 任何解决方法?我可能过度工程了。

1 个答案:

答案 0 :(得分:2)

您需要abstract关键字。但是,它只适用于方法,而不适用于属性(无论如何都是正确的方法)。

public abstract class AbstractBaseClass {

   public void publicMethod(){
       // ....
       String value = getAttribute();
       // ....
   }

   protected abstract String getAttribute();
}

public class ConcreteClass extends AbstractBaseClass {
    protected String getAttribute() {
      // Lazy loading attr
      if (attr==null) attr = "default value";
      return attr;
    }

    protected String attr;
}