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;
}
}
コンパイラがエラーをスローしないようにするにはどうすればよいですか? これはなぜですか?