不返回void的java虚拟方法
我希望派生类中的方法重写具体基类中的虚方法,并返回如下内容(即非void):不返回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.
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服务器之前,我想用不同的值填充一个类型,这取决于它是哪个子活动。我编辑了这个问题,以便更清楚地说明基类是具体的。是的,这就是为什么我不能将其抽象,扩展一个具体的类。我想我更喜欢这种方式,而不是仅仅为了让编译器高兴而返回一些东西。谢谢