Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不返回void的java虚拟方法_Java - Fatal编程技术网

不返回void的java虚拟方法

不返回void的java虚拟方法,java,Java,我希望派生类中的方法重写具体基类中的虚方法,并返回如下内容(即非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.

我希望派生类中的方法重写具体基类中的虚方法,并返回如下内容(即非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()中,它将永远不会运行。显然,它工作得很好,但似乎我做错了什么。

这个答案是在问题更新为基类必须是具体的之前创建的


如果您希望永远不会运行
Foo
test
方法,那么通过使
Foo
抽象
,使
test
成为
抽象
来强制执行它

public abstract class Foo {

    public void go() {
        System.out.print(this.test().toString());    
    }

    abstract protected Integer test();
}

如果由于示例中未显示的某些原因(例如,因为
Foo
扩展了一个具体的类),您无法将
Foo.test()
抽象化,并且您确信它永远不会被调用,如果没有合理的默认值,则最好抛出运行时异常:

protected Integer test()
{
    throw new UnsupportedOperationException("Calling test on Foo is not supported");
}

Java核心API中有这样的示例,请参见示例-这一示例的含义稍有不同,它用于可选方法,某些集合类型的实现实现了这些方法,而某些集合类型的实现没有实现这些方法。

将其抽象化如何?您可以声明test()方法摘要如果您不打算使用基本接口,那么将有不同的子类从
test()
返回不同类型的内容?或者它总是
整数
还是什么都没有?@Dawood总是一样的type@jontro,Foo是一个我不控制的类,它是Android中的一个活动。Foo是一个我不控制的类,这是安卓系统中的一个活动。在发布到web服务器之前,我想用不同的值填充一个类型,这取决于它是哪个子活动。我编辑了这个问题,以便更清楚地说明基类是具体的。是的,这就是为什么我不能将其抽象,扩展一个具体的类。我想我更喜欢这种方式,而不是仅仅为了让编译器高兴而返回一些东西。谢谢