java类A扩展类B,方法重写
抱歉,标题不清楚。 我的问题是:在类B中,当我调用foo()时,我想要的操作与类A对A的操作完全相同。我如何做到这一点,而不从一个数据库复制相同的代码? 如果我在B类中省略foo(),它会起作用吗?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
或者当我在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);
}
}