답변:
자바에서는 할 수없고 C ++에서는 할 수 없습니다. 이유는 컴파일러가 호출 할 함수를 파악하는 데 반환 값만으로는 충분하지 않기 때문입니다.
public int foo() {...}
public float foo() {..}
...
foo(); // which one?
float
, 그것은이다 double
.
foo();
반환 형식이 없으면 모호 하다는 사실이 반드시이를 오버로드로 허용하지 않는 이유는 아닙니다. 모호함을 유발할 수있는 인수 (예 :) foo(null);
가 있지만 이것이 본질적으로 오버로드를 무효화하지는 않습니다.
그 이유는 Java의 오버로드는 서명 이 다른 메소드에만 허용되기 때문입니다 .
반환 형식은 메서드 서명의 일부가 아니므로 오버로드를 구분하는 데 사용할 수 없습니다.
Java 자습서에서 메서드 정의를 참조하십시오 .
calculateAnswer(double, int, double, double)
"입니다. ". 반환 유형은 @konmik이 포함되어 있지 않습니다.
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");
}
}
컴파일러는 메서드를 구분할 때 반환 형식을 고려하지 않으므로 반환 형식이 다른 경우에도 동일한 서명으로 두 메서드를 선언 할 수 없습니다.
함수 실행을 알고 있다면 함수를 호출 할 때 정의 부분이 실행되고 마침내 return 문이 필요하다는 것을 알게 될 것입니다. 따라서 함수의 전체 정의 뒤에 return이 온다고 말할 수 있습니다. 동일한 이름과 동일한 유형 및 아니오를 가진 더 많은 기능. 함수 이름과 매개 변수가 동일하기 때문에 컴파일러가 호출 할 인수를 어떻게 알 수 있는지 호출 할 때 인수의 수입니다. 처음 호출 할 때 모든 초점은 인수와 함수 이름에 있으며 함수 정의가 완료된 후 마침내 return 문을 처리합니다.
컴파일 시간 오류는 런타임 오류보다 낫습니다. 따라서 Java 컴파일러는 동일한 매개 변수를 가진 동일한 메서드를 선언하면 컴파일러 시간 오류를 렌더링합니다.
실제로 불가능한 방법은 인수 또는 인수의 데이터 유형으로 만 오버로드 할 수 있습니다.