不返回void的java虚方法

时间:2018-06-18 21:36:39

标签: java

我希望派生类中的方法覆盖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()中永远不会运行。它显然工作得很好,但似乎我做错了。

2 个答案:

答案 0 :(得分:6)

这个答案是在 问题更新之前创建的,以说明基类必须具体。

如果您希望永远不会运行Foo的{​​{1}}方法,请通过testFoo强制执行该方法,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;吨