java类A扩展了类B,并覆盖了方法

标签 java class overriding extends

public class A {
   protected ClassX a;
   public void foo() {
       operations on a;
   }
}

public class B extends A {
   private ClassY b; // ClassY extends ClassX
   @Override
   public void foo() {
       //wanna the exact same operation as A.foo(), but on b;
   } 
}

抱歉标题不够清晰。 我的问题是:在 B 类中,当我调用 foo() 时,我想要与 A 类对 a 进行的完全相同的操作。我如何实现这一点并且不重复 A 中的相同代码? 如果我在 B 类中遗漏 foo() ,它会起作用吗? 或者当我在 foo() 中调用 super.foo() 时发生了什么;

最佳答案

由于 ClassY 扩展了 ClassX,那么您可以从类 B 中删除 private ClassY b。然后您可以将 ClassX 的实例设置为 a 实例变量。这使得 foo() 可以在 B 类中继承,但仍然使用相同的逻辑和实例变量。

public class A {
    protected ClassX a

    public void foo() {
        // operations on a;
    }
}

public class B extends A {
    // do something to set an instance of ClassY to a; for example...
    public void setClassY(ClassY b){
        this.a = b;
    }
}

关于java类A扩展了类B,并覆盖了方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10646199/

相关文章:

java - 似乎无法让 .doubleValue() 工作(我有最新版本的 Java)

java - android.view.ContextThemeWrapper 无法转换为 android.app.Activity

java - 在 Java 流中,peek 真的只用于调试吗?

python - 如何检测python子类中的方法重载?

java - 如何为restTemplate实现重试机制

r - 在 R 中创建新的 S3 类方法

python - 类中角色的pygame运动不起作用

java - 什么是 Java 中的对等类?

javascript - 重写Ext.data.Store,调用构造函数

ruby-on-rails - 如何将新 Action 添加到设计注册 Controller 中?