0

我还没有找到合适的方法来做到这一点。假设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();

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

4

1 回答 1

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;
}
于 2012-11-22T10:27:58.167 回答