"안녕하세요, Amigo! 메소드 오버로딩 에 대해 알려드리겠습니다 ."
"당신도 그것들을 과부하시킬 수 있습니까?! 멋진 하루!"
"당신은 그들과 함께 많은 것을 할 수 있지만, 우리는 지금 그것에 대해 다루지 않을 것입니다."
"그것은 거래의."
"오버로딩은 매우 간단한 작업입니다. 실제로 메서드에 대한 작업도 아닙니다. 때로는 무서운 이름인 파라메트릭 다형성( parametric polymorphism) 으로 불리기도 합니다 ."
기억해야 할 것은 클래스의 모든 메서드는 고유한 이름을 가져야 한다는 것입니다.
"네, 알아요."
"글쎄, 그건 전적으로 사실이 아닙니다. 내 말은, 전혀 사실이 아닙니다. 메서드는 고유한 이름을 가질 필요가 없습니다. 고유해야 하는 것은 메서드 이름과 해당 매개변수 유형의 조합 입니다 . 이 조합은 또한 메서드 시그니처라고 합니다."
암호 | 코멘트 |
---|---|
|
이것은 허용됩니다. 두 메서드에는 고유한 이름이 있습니다. |
|
그리고 이것은 또한 허용됩니다. 두 메서드에는 고유한 이름(시그니처)이 있습니다. |
|
여기서 메서드 이름은 여전히 고유합니다. |
|
그러나 이것은 허용되지 않습니다. 다른 형식이 전달되더라도 메서드는 고유하지 않습니다. |
|
그러나 이것은 허용됩니다. 메소드 매개변수는 고유합니다. |
"어딘가에서 이미 본 적이 있습니다."
"예. " System.out.println " 을 입력하면 IntelliJ IDEA는 서로 다른 매개변수를 사용하는 수십 가지 버전의 인쇄 방법을 제안합니다. 컴파일러는 단순히 전달한 매개변수의 유형에 따라 필요한 방법을 식별하고 호출합니다."
"그렇게 어렵지는 않습니다. 하지만 다형성은 아닙니다."
"또는 더 정확하게는 메서드 재정의가 아닙니다."
그런데 매개변수 이름이 부적절하다는 점을 지적하고 싶습니다. 컴파일하는 동안 손실됩니다. 메서드가 컴파일되면 해당 이름과 매개변수 유형만 알려집니다.
GO TO FULL VERSION