在 Java 中,如果方法定义返回某些内容,则调用该方法的类必须准备将该方法的返回值捕获到变量中。至少我在逻辑上是这样理解的。但是我有一个奇怪的情况,编译器没有抱怨。
我有一个定义了方法的 Animal 接口。实现 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;
}
}
编译器如何不抛出错误?为什么会这样?