Java에서 메소드 정의가 무언가를 리턴하면 해당 메소드를 호출하는 클래스는 해당 메소드의 리턴 값을 변수로 캡처하도록 준비해야합니다. 적어도 그것이 내가 논리적으로 이해하는 것입니다. 하지만 컴파일러가 불평하지 않는 이상한 상황이 있습니다.Java에서 캡처해야하는 값을 반환 할 것으로 예상되는 메서드 호출은 컴파일 오류를 발생시키지 않습니다. 왜?
나는 메서드가 정의 된 Animal 인터페이스가 있습니다. Animal 인터페이스를 구현하는 AnimalImpl 클래스 및 Animal 유형의 인스턴스 변수에 대해 composition을 사용하는 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와 같이) 메소드 호출의 리턴 매개 변수를 무시하는 것이 합법적입니다. –