改变继承的超级方法

时间:2016-05-25 14:49:15

标签: java oop inheritance

我想更改继承类的超级方法。我有类似的东西:

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的方法。然后,我该怎么做?

3 个答案:

答案 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的实例向AB转播,具体取决于useB()的结果并在上传的实例上调用method()