在Java中,如果方法定义返回某个东西,那么调用该方法的类必须准备将该方法的返回值捕获到变量中。至少这就是我理解的逻辑。但我有一个奇怪的情况,编译器不抱怨。在java中,我期望返回一个必须捕获的值的方法调用不会引发编译错误。为什么?
我有一个动物界面与定义的方法。实现Animal接口的AnimalImpl类,以及使用组合作为Animal类型的实例变量的Lion类。
这是代码。为什么编译器不会疯狂?
接口:
public interface Animal {
public int walk(int steps);
public int fly(int miles);
public void eat(String food);
}
实现:
public class AnimalImpl implements Animal {
@Override
public int walk(int steps) {
return steps * 100;
}
@Override
public int fly(int miles) {
return miles/5;
}
@Override
public void eat(String food) {
System.out.println("Animal ate food: "+food);
}
}
客户:
public class Lion {
private Animal ani;
public String executeAnimalMethod(){
ani = new AnimalImpl();
ani.eat("carrots");
ani.walk(100);
ani.fly(100);
return null;
}
}
如何才能补偿梅勒不会抛出一个错误?为什么会这样?
编译错误不会被抛出,它们会被打印出来。 – EJP
在Java中(如C),忽略方法调用的返回值是完全合法的。 –