Java에서 다른 반환 유형으로 오버로드?
반환 유형을 변경하여 함수를 오버로드 할 수없는 이유는 무엇입니까? Java의 차기 버전에서 변경됩니까?
참고로 C ++에서 가능합니까?
자바에서는 할 수없고 C ++에서는 할 수 없습니다. 이유는 컴파일러가 호출 할 함수를 파악하는 데 반환 값만으로는 충분하지 않기 때문입니다.
public int foo() {...}
public float foo() {..}
...
foo(); // which one?
그 이유는 Java의 오버로드는 서명 이 다른 메소드에만 허용되기 때문입니다 .
반환 형식은 메서드 서명의 일부가 아니므로 오버로드를 구분하는 데 사용할 수 없습니다.
Java 자습서에서 메서드 정의를 참조하십시오 .
Java 5.0 이전에는 메서드를 재정의 할 때 매개 변수와 반환 유형이 모두 정확히 일치해야합니다. Java 5.0에서는 공변 반환 유형이라는 새로운 기능을 도입했습니다. 동일한 서명으로 메서드를 재정의 할 수 있지만 반환 된 객체의 하위 클래스를 반환합니다. 즉, 서브 클래스의 메소드는 수퍼 클래스에서 동일한 시그니처를 사용하여 메소드가 리턴 한 유형의 서브 클래스 인 객체를 반환 할 수 있습니다.
Overloaded
Java의 메소드는 인수도 다르기 때문에 다른 반환 유형을 가질 수 있습니다.
샘플 코드를 확인하세요.
public class B {
public String greet() {
return "Hello";
}
//This will work
public StringBuilder greet(String name) {
return new StringBuilder("Hello " + name);
}
//This will not work
//Error: Duplicate method greet() in type B
public StringBuilder greet() {
return new StringBuilder("Hello Tarzan");
}
}
컴파일러는 메서드를 구분할 때 반환 형식을 고려하지 않으므로 반환 형식이 다른 경우에도 동일한 서명으로 두 메서드를 선언 할 수 없습니다.
메서드를 오버로드하는 동안 반환 유형은 중요하지 않습니다. 모호함이 없는지 확인하기 만하면됩니다!
Java가 호출 할 메소드를 알 수있는 유일한 방법은 인수 목록의 유형을 구별하는 것입니다. 컴파일러가 동일한 이름과 동일한 인수 유형을 가진 두 개의 메서드를 허용하는 경우 어떤 메서드를 호출해야하는지 결정할 방법이 없습니다.
컴파일러는 메서드를 구분할 때 반환 형식을 고려하지 않으므로 반환 형식이 다른 경우에도 동일한 서명으로 두 메서드를 선언 할 수 없습니다.
함수 실행을 알고 있다면 함수를 호출 할 때 정의 부분이 실행되고 마침내 return 문이 필요하다는 것을 알게 될 것입니다. 따라서 함수의 전체 정의 뒤에 return이 온다고 말할 수 있습니다. 동일한 이름과 동일한 유형 및 아니오를 가진 더 많은 기능. 함수 이름과 매개 변수가 동일하기 때문에 컴파일러가 호출 할 인수를 어떻게 알 수 있는지 호출 할 때 인수의 수입니다. 처음 호출 할 때 모든 초점은 인수와 함수 이름에 있으며 함수 정의가 완료된 후 마침내 return 문을 처리합니다.
컴파일 시간 오류는 런타임 오류보다 낫습니다. 따라서 Java 컴파일러는 동일한 매개 변수를 가진 동일한 메서드를 선언하면 컴파일러 시간 오류를 렌더링합니다.
no not really possible that way you can only overload by no of arguments or data type of the arguments
참고URL : https://stackoverflow.com/questions/2439782/overload-with-different-return-type-in-java
'IT story' 카테고리의 다른 글
Twitter 부트 스트랩을 사용하여 자동으로 경고를 닫는 방법 (0) | 2020.09.04 |
---|---|
@viewchild [duplicate]를 사용하여 여러 viewchildren에 액세스 (0) | 2020.09.04 |
`sin`에 대한 정의되지 않은 참조 (0) | 2020.09.04 |
상수는 정적으로 표시 할 수 없습니다. (0) | 2020.09.04 |
SQL Server 데이터베이스 복원 오류 : 지정된 캐스트가 유효하지 않습니다. (0) | 2020.09.04 |