我有一个简单的继承层次结构和一个单一的接口。考虑将由 B 类扩展的 A 类。我希望这两个类都实现接口 I 并且 A 类是抽象的。在java中,我大致有以下内容:
public interface I {
public double foobar();
public void print();
}
public abstract class A implements I {
@Override public double foobar() { /*return foo*/}
@Override public void print() {
System.out.print(foobar());
}
}
public class B extends A {
@Override public double foobar() { /*return bar*/ }
@Override public void print() {
super.print();
System.out.print(foobar);
}
}
我的意图是,当我实例化 B 类型的对象并调用它的 print() 时,让 B 类型的对象首先打印 A 类的 foo,然后打印 B 类的 bar;但是,当我编译执行此代码时,它在两种情况下都从 B 类调用 foobar()。例如,如果 foo 等于 1 并且 bar 等于 2,则上述代码的输出将如下所示:
2 2
但我希望它是 1 2
我尝试过使用各种类型转换调用该方法,但没有运气。有什么建议么?
编辑:感谢您的许多建议,并澄清一下,我希望 A 的每个潜在子类都实现 I 并且我为没有明确说明而道歉。此外,我目前通过在 A privateFooBar() 中添加一个由 A 的 print 和 A 的 foobar 调用的附加方法来获得工作代码;但是,我仍然想知道是否有更优雅的方法来完成这项任务。