我想更改继承类的超级方法。我有类似的东西:
class A {
public void method() {
// Do something here
...
}
}
class B extends A {
@Override
public void method() {
// Do something here
...
super.method();
}
}
class C extends B {
@Override
public void method() {
if(useB()) {
// Use B's method
super.method();
} else {
// Use A's method
super.super.method();
}
}
}
正如您所看到的,有时我需要使用A的方法,有时候需要使用B的方法。然后,我该怎么做?
答案 0 :(得分:0)
在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()
}
}
}
答案 1 :(得分:0)
这不对,但你可以随时添加旗帜。如果该标志为真,则调用B方法,如果该方法为假,则调用A方法。
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());
}
}
答案 2 :(得分:0)
将条件if (useB())
移至C.method()
之外,并将C
的实例向A
或B
转播,具体取决于useB()
的结果并在上传的实例上调用method()
。