메소드 오버로드는 컨텍스트에 따라 다른 결과가있는 동일한 메소드를 언어가 사용할 수있는 기능이라는 것을 알게되었습니다. 어쨌든, 다른 정의를 읽었을 때, 나는 그것이 전체 정의가 아닌 것처럼 떨어졌습니다. 메서드 오버로드가 더 있습니까?메서드 오버로드 란 무엇입니까?
3
A
답변
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()
이 두 가지 방법을 통해 호출 할 수 있습니다 : 당신은 두 개의 인수로 호출 할 수 있습니다 또는 세 개의 인수로 호출 할 수 있습니다