"안녕하세요, Amigo! 메소드 오버로딩 에 대해 알려드리겠습니다 ."

"당신도 그것들을 과부하시킬 수 있습니까?! 멋진 하루!"

"당신은 그들과 함께 많은 것을 할 수 있지만, 우리는 지금 그것에 대해 다루지 않을 것입니다."

"그것은 거래의."

"오버로딩은 매우 간단한 작업입니다. 실제로 메서드에 대한 작업도 아닙니다. 때로는 무서운 이름인 파라메트릭 다형성( parametric polymorphism) 으로 불리기도 합니다 ."

기억해야 할 것은 클래스의 모든 메서드는 고유한 이름을 가져야 한다는 것입니다.

"네, 알아요."

"글쎄, 그건 전적으로 사실이 아닙니다. 내 말은, 전혀 사실이 아닙니다. 메서드는 고유한 이름을 가질 필요가 없습니다. 고유해야 하는 것은 메서드 이름과 해당 매개변수 유형의 조합 입니다 . 이 조합은 또한 메서드 시그니처라고 합니다."

암호 코멘트
public void print();
public void print2();
이것은 허용됩니다. 두 메서드에는 고유한 이름이 있습니다.
public void print();
public void print(int n);
그리고 이것은 또한 허용됩니다. 두 메서드에는 고유한 이름(시그니처)이 있습니다.
public void print(int n, int n2);
public void print(int n);
여기서 메서드 이름은 여전히 ​​고유합니다.
public int print(int a);
public void print(int n);
그러나 이것은 허용되지 않습니다. 다른 형식이 전달되더라도 메서드는 고유하지 않습니다.
public int print(int a, long b);
public long print(long b, int a);
그러나 이것은 허용됩니다. 메소드 매개변수는 고유합니다.

"어딘가에서 이미 본 적이 있습니다."

"예. " System.out.println " 을 입력하면 IntelliJ IDEA는 서로 다른 매개변수를 사용하는 수십 가지 버전의 인쇄 방법을 제안합니다. 컴파일러는 단순히 전달한 매개변수의 유형에 따라 필요한 방법을 식별하고 호출합니다."

"그렇게 어렵지는 않습니다. 하지만 다형성은 아닙니다."

"또는 더 정확하게는 메서드 재정의가 아닙니다."

그런데 매개변수 이름이 부적절하다는 점을 지적하고 싶습니다. 컴파일하는 동안 손실됩니다. 메서드가 컴파일되면 해당 이름과 매개변수 유형만 알려집니다.