我希望派生类中的方法覆盖CONCRETE基类中的虚方法并返回一些东西(即不是void),如下所示:
public class HelloWorldApp
{
public static void main(String args[])
{
Bar bar = new Bar();
bar.go();
}
}
public class Foo
{
public void go()
{
System.out.print(this.test().toString());
}
protected Integer test()
{
return 1;
}
}
public class Bar extends Foo
{
@Override
protected Integer test()
{
return 2;
}
}
有没有办法做到这一点,没有多余的'返回1;'在Foo.test()中永远不会运行。它显然工作得很好,但似乎我做错了。
答案 0 :(得分:6)
这个答案是在 问题更新之前创建的,以说明基类必须具体。
如果您希望永远不会运行Foo
的{{1}}方法,请通过test
类Foo
强制执行该方法,abstract
为{ {1}}。
test
答案 1 :(得分:1)
如果由于某些原因你无法将Foo.test()
抽象化,那么你的例子中没有显示(例如因为Foo
扩展了一个具体的类)并且你确定它永远不会被调用,如果没有合理的默认值,则抛出运行时异常可能更好:
protected Integer test()
{
throw new UnsupportedOperationException("Calling test on Foo is not supported");
}
在Java核心API中有这样的示例,例如参见UnsupportedOperationException - 这个有一个稍微不同的含义,它用于某些集合类型的某些实现实现的可选方法,并且有些#39;吨