2013-03-28 2 views
3

메소드 오버로드는 컨텍스트에 따라 다른 결과가있는 동일한 메소드를 언어가 사용할 수있는 기능이라는 것을 알게되었습니다. 어쨌든, 다른 정의를 읽었을 때, 나는 그것이 전체 정의가 아닌 것처럼 떨어졌습니다. 메서드 오버로드가 더 있습니까?메서드 오버로드 란 무엇입니까?

답변

7

아주 일반적인 방법 일뿐입니다. 메서드 오버로드를 사용하면 단일 메서드 이름을 사용할 수 있지만 "컨텍스트"(일반적으로 전달되는 인수의 유형 또는 수)에 따라 하나 이상의 메서드 이름을 사용할 수 있지만 "오버로드"(두 개 이상의 버전 제공)가 있습니다. 각 방법은 분리되어 있기 때문에 "다른 결과"가 발생할 수 있습니다.

예를 들어, C#을 사용, 당신은 쓸 수 있습니다 :

void Foo() // Version with no arguments 
{ 
} 

void Foo(int arg) // Version with a single int 
{ 
} 

void Foo(string arg1, double arg2) // Version with string and double parameters 
{ 
} 
0

이름이 같은 방법/함수를 생성하지만 그 input/otput 매개 변수에 대해 다른 몇 가지 언어의 능력입니다. 당신은 그들의 signature에 차이가 보는 바와 같이, 서로 다른 매개 변수를 허용 다른 생성자를 가진 클래스가

//Constructor without parameters 
    public User() { 
    } 

//Constructor with only one parameter 
public User(String username) 
{ 
this.username = username; 
} 

//Constructor with two parameters 
public User(String username, int age) 
{ 
    this.username=username; 
    this.age=age; 
} 

:

고전적인 예는 자바의 클래스 constructor overloading 예이다.

1

다른 매개 변수가있는 동일한 이름의 여러 가지 메소드가있는 곳입니다.

public void kittens(String paws) { 

} 

public void kittens(String paws, boolean tail) { 

} 

모두

함께 서로 독립적으로 호출 할 수있는 하나

kittens("fat"); 

또는

kittens("thin", true); 
0

이 경우 콘텍스트 번호 즉, 상기 방법의 인수 서명으로 판단 및 인수의 유형. 예를 들어

:

methodName(new Vector(x, y, w, h)) 
3

먼저, 프로그램의 서명이 무엇인지 알아야한다 :

methodName(int x, int y, int w, int h) 
methodName(Vector x) 

첫 번째 방법의 구현은 대안이 될 것입니다. 함수의 서명은 그 표현입니다. 함수의 이름과 매개 변수가 서명을 판별합니다.

오버로드는 우리의 필요를 충족시키기 위해 함수의 서명을 변경하는 것을 의미합니다.

int sum(int x, int y, int z) { 
    return x + y + z; 
} 

int sum(int x, int y) { 
    return x + y; 
} 

이제 기능 sum()이 두 가지 방법을 통해 호출 할 수 있습니다 : 당신은 두 개의 인수로 호출 할 수 있습니다 또는 세 개의 인수로 호출 할 수 있습니다

다음 예제에서보세요. 귀하의 필요를 충족시키기 위해 서명을 변경했습니다. 두 개의 인수에 대해 별도의 함수를 작성하는 대신 동일한 함수에로드를 넣습니다. 이것이 바로 오버로드라고합니다.