継承されたクラスのスーパーメソッドを変更したいと思います。私はそれのようなものを持っています:継承されたスーパーメソッドを変更する
ご覧のとおり、ときどき私はAの方法と時にはBの方法を使う必要があります。では、どうしたらいいですか?
継承されたクラスのスーパーメソッドを変更したいと思います。私はそれのようなものを持っています:継承されたスーパーメソッドを変更する
ご覧のとおり、ときどき私はAの方法と時にはBの方法を使う必要があります。では、どうしたらいいですか?
は、それは右ではないのですが、あなたは常にフラグを追加することができ、あなたのB.java
class A {
public void method() {
// Do something here
...
}
}
class B extends A {
public void preserveMethodA(){
super.method();
}
@Override
public void method() {
// Do something here
...
preserveMethodA()
}
}
class C extends B {
@Override
public void method() {
if(useB()) {
// Use B's method
super.method();
} else {
// Use A's method
super.preserveMethodA()
}
}
}
に保存方法を追加します。フラグがtrueの場合はBメソッドが呼び出され、falseの場合はメソッドが呼び出されます。
class A {
public void method(boolean flag) {
// Do something here, ignore flag
}
}
class B extends A {
@Override
public void method(boolean flag) {
if (flag) {
//do something
} else {
super.method();
}
}
}
class C extends B {
@Override
public void method(boolean flag) {
super.method(useB());
}
}
C.method()
の条件
if (useB())
外を移動し、いずれか
A
又は
B
は
useB()
の結果に依存する
C
のインスタンスをアップキャストとupcastedインスタンスに
method()
を呼び出す
。
私は短い答えがあると思います:あなたはしないでください。あなたはあなたの構造について考えるべきであり、a - > b - > c構造なしでこれを解決しようとします。あなたのデザインと、なぜこれが起こったのかを考えてみましょう。この「問題」がここにあるという事実は「コードの匂い」と呼ばれ、何かがおそらくオフであることを意味します – Nanne