[java] Java의 메서드 서명에 반환 유형이 포함되어 있습니까?

Java 클래스 / 인터페이스의 메서드 서명에 반환 유형이 포함되어 있습니까?

예:

Java는이 두 가지 방법의 차이점을 알고 있습니까?

public class Foo {
    public int  myMethod(int param) {}
    public char myMethod(int param) {}
}

아니면 메소드 이름과 매개 변수 목록 만 중요할까요?



답변

Oracle Docs 에서 인용 :

정의 : 메서드 선언의 구성 요소 중 두 가지는 메서드 서명 (메서드 이름과 매개 변수 유형)으로 구성됩니다.

여기에 이미지 설명 입력

이 예제를 포함하도록 질문이 편집되었으므로 :

public class Foo {
    public int  myMethod(int param) {}
    public char myMethod(int param) {}
}

아니오, 컴파일러는 서명 myMethod(int param)이 동일하기 때문에 차이점을 알 수 없습니다 . 두 번째 줄 :

    public char myMethod(int param) {}

오류가 발생할 수 있습니다. method is already defined in class , 이는 위의 문을 추가로 확인합니다.


답변

Java의 클래스 메서드 서명에 반환 유형이 포함되어 있습니까?

Java에서는 그렇지 않지만이 JVM에서는 명백한 혼란을 초래할 수 있습니다.

Java의 인터페이스 메서드 서명에 반환 유형이 포함되어 있습니까?

클래스 메소드와 동일합니다.

아니면 메소드 이름과 매개 변수 목록 만 있습니까?

Java의 메소드 이름 및 매개 변수 유형. 예를 들어 매개 변수 주석 및 이름은 중요하지 않습니다.


답변

바이트 코드 수준에서 “반환 유형”은 메서드 서명의 일부입니다. 이걸 고려하세요

public class Test1  {
    public Test1 clone() throws CloneNotSupportedException {
        return (Test1) super.clone();
    }
}

바이트 코드에는 두 개의 clone () 메서드가 있습니다.

public clone()LTest1; throws java/lang/CloneNotSupportedException

public clone()Ljava/lang/Object; throws java/lang/CloneNotSupportedException 

반환 유형에 의해서만 다릅니다.


답변

Java가 아닙니다. 메소드 이름 및 매개 변수 목록은 메소드 서명 전용입니다 . 반환 유형은 포함되지 않습니다.


답변

Java Language Spec 말한다

이름과 인수 유형이 동일한 경우 두 메서드는 동일한 서명을 갖습니다.

따라서 아니요, 반환 유형은 메서드 서명의 일부가 아닙니다.


답변

JAVA 및 기타 여러 언어에서는 변수없이 메서드를 호출하여 반환 값을 유지할 수 있습니다. 반환 유형이 메서드 시그니처의 일부인 경우 반환 값을 보유하는 변수를 지정하지 않고 호출 할 때 어떤 메서드가 호출되는지 알 수있는 방법이 없습니다.


답변

Bro, Java에서는 이름과 매개 변수로 메소드를 호출하여 코드에서 사용합니다.

myMethod (20, 40)

따라서 JAVA는 해당 선언 (이름 + 매개 변수)에서 일치하는 유사한 항목 만 검색합니다. 이것이 메소드 서명에 메소드의 이름과 매개 변수 만 포함되는 이유입니다. 🙂