> Java > java지도 시간 > Java 오류: 메소드 오버로딩 오류, 해결 방법

Java 오류: 메소드 오버로딩 오류, 해결 방법

王林
풀어 주다: 2023-06-24 12:52:40
원래의
1876명이 탐색했습니다.

Java는 객체 지향 프로그래밍 언어이며 메서드 오버로딩은 중요한 개념 중 하나입니다. 메소드 오버로딩은 동일한 클래스에 메소드 이름은 같지만 매개변수 목록이 다른 여러 메소드가 있을 수 있음을 의미합니다. 그러나 코드를 작성할 때 메서드 오버로드 오류가 발생할 수 있으며, 이로 인해 코드가 컴파일되지 않거나 런타임 오류가 발생합니다. 이 문서에서는 일반적인 Java 메서드 오버로딩 오류와 이를 해결하는 방법을 살펴봅니다.

  1. 매개변수 유형 오류

메서드 오버로드에는 다른 매개변수 목록이 필요하지만 이는 매개변수 수뿐만 아니라 매개변수 유형 및 순서도 나타냅니다. 두 메소드의 매개변수 유형만 다르고 매개변수의 개수와 순서가 동일한 경우 동시에 정의할 수 없습니다. 예:

public void foo(int a, int b) {}  
public void foo(double a, double b) {}
로그인 후 복사

이 코드는 메서드 이름은 동일하지만 매개 변수 유형만 다른 ​​두 메서드를 정의합니다. 전달된 매개변수 유형이 정의되지 않았기 때문에 Java 컴파일러는 어떤 메소드를 호출해야 하는지 결정할 수 없습니다. 이 경우 컴파일러는 "메서드 foo(int, int)가 이미 클래스 xxxxx에 정의되어 있습니다" 오류를 보고합니다.

이 문제를 해결하려면 개발자는 메서드 이름을 재정의하거나 매개변수 목록이 달라지도록 매개변수의 유형이나 순서를 변경해야 합니다. 예를 들어, 코드는 다음과 같이 리팩터링될 수 있습니다.

public void fooInt(int a, int b) {}
public void fooDouble(double a, double b) {}
로그인 후 복사
  1. 매개변수 개수가 잘못됨

또 다른 일반적인 실수는 두 메소드의 매개변수 개수가 다르지만 매개변수 유형이 동일하다는 것입니다. 이는 허용되지 않습니다. 자바 허용. 예:

public void bar(int a) {}  
public void bar(int a, int b) {}
로그인 후 복사

이 코드는 메서드 이름은 동일하지만 매개변수 수가 다른 두 개의 메서드를 정의합니다. Java 컴파일러는 매개변수 수에 따라 올바른 방법을 선택하므로 이 두 가지 방법은 다시 충돌을 방지합니다. 그러나 이 경우 하나의 매개변수만 전달하는 bar 메소드를 호출하면 Java 컴파일러는 어떤 메소드를 호출해야 하는지 알 수 없습니다. 이 경우 컴파일러는 "메서드 bar(int)가 이미 xxxxx 클래스에 정의되어 있습니다." 오류를 보고합니다.

이 문제를 해결하려면 개발자는 메서드 이름을 다시 정의하거나 추가 매개 변수를 추가하여 두 메서드의 매개 변수를 다르게 만들어야 합니다. 예를 들어 코드는 다음과 같이 리팩토링될 수 있습니다.

public void bar(int a) {}
public void bar(int a, int b, int c) {}
로그인 후 복사
  1. 다른 반환 값

Java 메서드 오버로드에는 동일한 메서드 이름과 다른 매개 변수 목록이 필요하지만 반환 값은 다를 수 있습니다. 그러나 실제로는 동일한 이름을 가진 메서드의 반환 값이 다른 경우 컴파일러는 이를 오류로 간주합니다.

예:

public int getResult(int a) {
  return a;
}
public double getResult(int a, int b) {
  return a * b;
}
로그인 후 복사

이 코드는 "getResult"라는 두 가지 메서드를 정의하지만 반환 값은 다릅니다. Java 컴파일러는 반환 값의 유형을 기반으로 두 메서드를 구별할 수 없으므로 컴파일러는 "메서드 getResult(int)가 이미 클래스 xxxx에 정의되어 있습니다." 오류를 보고합니다.

이 문제를 해결하려면 개발자는 두 메서드의 반환 값 유형을 동일하게 만들어야 합니다. 예를 들어 코드는 다음과 같이 리팩토링될 수 있습니다.

public int getResult(int a) {
  return a;
}
public int getResult(int a, int b) {
  return a * b;
}
로그인 후 복사

이 예에서는 두 번째 메서드의 반환 유형을 double에서 int로 변경하여 두 메서드의 반환 값 유형이 동일하므로 컴파일을 제거할 수 있습니다. 오류.

요약하자면, 메소드 오버로딩은 Java 프로그래밍에서 매우 유용한 기술로, 코드의 가독성과 유지 관리성을 향상시킬 수 있습니다. 그러나 실제로는 몇 가지 일반적인 메서드 오버로딩 오류가 발생할 수 있습니다. 이러한 오류를 이해함으로써 코드를 최적화하고 개선하여 더욱 강력하고 관리하기 쉽게 만들 수 있습니다.

위 내용은 Java 오류: 메소드 오버로딩 오류, 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿