【发布时间】:2013-03-10 08:24:05
【问题描述】:
我有一个简单的继承层次结构和一个单一的接口。考虑将由 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 调用的附加方法来获得工作代码;但是,我仍然想知道是否有更优雅的方法来完成这项任务。
【问题讨论】:
-
你的电话号码在哪里?
-
很抱歉没有明确地编写我的调用代码。当我说“当我实例化 B 类型的对象并调用它的 print()”时,我的意思是 public class X { public static void main(String[] args) { B b = new B(); B.print(); }}
标签: java inheritance interface