2

基本クラスとサブクラスがあります。基本クラスには、サブクラスで使用したい共通のメソッドとその実装がありますが、スーパークラスの代わりにサブクラスのメンバー変数を使用したいです。サブクラスで同じメソッドを書き換えたくありません。Javaでこれを達成する方法はありますか。

4

2 に答える 2

0

メソッドを使用してメンバーにアクセスし、サブクラスでオーバーライドできます。

Class A{
  public void DoStuff(){
     int aux = getResource; 
     /*cool things with aux*/
  }
  protected int getResource(){
    return internal_member;
  }
  private int internal_member;
}

Class B extends A{
  private int another_member;
  @Override
  public int getResource(){
     return another_member;
  }

}

ただし、これによってクラスAを追跡する人々がメンバーを直接使用することを妨げないことを考慮に入れてください。メンバーとゲッターの基本クラスを作成する方がよい場合があります。

前に概説したように、別のオプションは、基本クラスのデータメンバーを保護し、サブクラスで初期化することです。

Class A{
  public void DoStuff(){
     /*cool things with internal_member*/
  }
  protected List internal_member;
  A(){internal_member = /*Set here a value*/}
}

Class B extends A{
  B(){internal_member = /*Set a different value here! you can even declare a member and assign it here*/}

}

必要に応じて、引数付きのコンストラクターを使用できます。

于 2013-03-10T21:58:53.360 に答える
0

メンバー変数にセッターを作成してprotectedから、サブクラスのコンストラクター内でスーパーの変数の値をオーバーライドできます。

class Animal {
   private String voice = "Oooo";

   protected void setVoice(String voice) {
       this.voice = voice;
   }

   public void speak() {
       System.out.println(this.voice);
   }

}

class Dog extends Animal {

    public Dog() {
        setVoice("woof"); 
    }

}
于 2013-03-10T22:03:14.993 に答える