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