0

これを行う適切な方法が見つかりませんでした。Class Aaから継承するとしましょうClass A。私の考えは、Aa で 2 つの属性をオーバーライドすることでした。そのため、この関数が 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 に答える