인터페이스를 가지고 놀아보고 실제로 이해할 수없는 것에 관한 질문이 있습니다.Java - 인터페이스 메소드
다음 코드는 실행되지 않습니다. 이는 인터페이스 메서드에서 모든 개체에서 작동하는 메서드가 필요하며 구현 된 메서드에는 문자열 개체 만 허용하도록 변경된 서명이 있습니다.
interface I {
public void doSomething(Object x);
}
class MyType implements I {
public void doSomething(String x) {
System.out.println(x);
}
}
그러나, 다음 코드 블록을 사용하여, 나는이 일을 한 것을보고 충격을 받았다. 우리는 객체를 반환 할 것으로 예상하고 구현 된 메서드는 문자열 객체 만 반환하기 때문에 작동하지 않을 것이라고 생각했습니다. 왜 이것이 작동하고 전달 된 매개 변수와 반환 유형의 두 가지 원칙의 차이점은 무엇입니까? String
가 Object
때문에
interface I {
public Object doSomething(String x);
}
class MyType implements I {
public String doSomething(String x) {
System.out.println(x);
return(x);
}
}
여기에 대한 답변은 아닙니다. 그의 첫 번째 예는 똑같은 "캐스트"였다. 그것이 두 번째로 일한 이유는 maress에 의해 설명된다. – keyser
첫 번째 예에서는 던지기가 없다. 인터페이스는 객체를 매개 변수로 사용하는 메소드를 선언합니다. 문자열을 취하는 메서드를 가지는 것은 Object를 가져 오는 것과 동일하지 않습니다. 객체를 취하는 것과 같이 정수 메소드를 문자열 메소드에 전달할 수 있습니까? –
그 대답은 더 많지만, 여전히 그다지 중요하지 않습니다 : p – keyser