java类A扩展类B,方法重写

java类A扩展类B,方法重写,java,class,overriding,extends,Java,Class,Overriding,Extends,抱歉,标题不清楚。 我的问题是:在类B中,当我调用foo()时,我想要的操作与类A对A的操作完全相同。我如何做到这一点,而不从一个数据库复制相同的代码? 如果我在B类中省略foo(),它会起作用吗? 或者当我在foo()中调用super.foo()时发生了什么 因为ClassY扩展了ClassX,所以您可以从类b中删除私有ClassY b。然后您可以将ClassX的实例设置为a实例变量。这允许在类B中继承foo(),但仍然使用相同的逻辑和实例变量 public class A { prot

抱歉,标题不清楚。 我的问题是:在类B中,当我调用foo()时,我想要的操作与类A对A的操作完全相同。我如何做到这一点,而不从一个数据库复制相同的代码? 如果我在B类中省略foo(),它会起作用吗?
或者当我在foo()中调用super.foo()时发生了什么

因为ClassY扩展了ClassX,所以您可以从类b中删除
私有ClassY b
。然后您可以将ClassX的实例设置为
a
实例变量。这允许在类B中继承
foo()
,但仍然使用相同的逻辑和实例变量

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;
   } 
}

这听起来像是
ClassX
ClassY
将有一个通用的接口(如果它们具有与您希望在earch上调用的相同的方法,至少是这样)。您是否考虑过让
foo()
接受公共接口类型的对象

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;
    }
}

您可以在重写的方法中执行
super.foo()

如果希望在B中执行与在A中相同的操作,请不要在B中定义foo()方法。如果希望在A中执行不同的操作,请重写B中的foo()方法。如果希望在B中扩展foo()方法,使其先在A中执行操作,然后在B中执行操作,请调用super.foo()在方法的顶部;如果您希望A中的操作位于B中的操作之后,那么在方法foo()的末尾调用super.foo()。

这对
B
@nicholas.hauschild没有任何影响,OP说是的。@JeremyHeiler:会是super.A=This.B吗?@Alex,不会。因为B扩展了A,然后,B的任何实例都可以将它自己的
a
称为
this.a
。另外,说
this.b
意味着有一个
b
实例变量,在我的示例中没有。这会对a进行操作吗?当然,当你调用super时,它首先运行你的超类的方法,在本例中,类A方法foo.我认为ClassX和ClassYInheritme可以只是ClassX,因为ClassY扩展了ClassX@hoge1e3你说得对。这是我在最初的问题中没有看到的。不管怎样,这仍然是一个有效的解决方案。
你的意思是我的类层次结构没有得到很好的定义吗?
Alex,我删除了我的答案。我没有把问题读清楚。请不要理会。
public class A {
   private ClassX a;
   protected void foo(ClassXAndClassYInheritMe anObject) {
       operations on anObject;
   }

   public void foo() {
       foo(a);
   }
}

public class B {
   private ClassY b;
   @Override
   public void foo() {
       foo(b);
   }
}