/*====================================================
■■■ 메소드 중복정의(Method Overloading) ■■■
- 메소드 오버로딩이 가능한 형태와 불가능한 형태
===========================================*/
/*오버로딩을 개념을 이해하는지 확인하고 넘어가는 과정 메인메소드 아래에서 프린트메소*/
public class Test096
{
public static void main(String[] args)
{
}
public static void print(){}
public static void print(int i){}
public static void print(int j){} //(X) 매개변수 타입이랑 개수가 같아서 안된다
public static void print(char r){} //(O) ※ 단 자동형변환 법칙에 유의하면서 써야 한다
public static void print(int i , int j){} //가능함
public static void print(int i , double d){} //가능함 .그러나 자동형변환 법칙에 유의
public static void print(double d , int k ){}
public static double print(double d){return 3.14;} //가능하다
public static void print(double d){} //이거는? 중복정의이 되는지 안되는지의 핵심은 '메소드 호출 시 구분이 되냐 안되냐'이다.
/*
★ 주의 반환값이 같거나 다른 것은 중요한 부분이 아니다. 매개변수 부분이 다른 것이 중요하다.
자바는 이퀄대입연산자가 있으면 우선 왼쪽부터 본다.
◈ double result = print(10.1);
◈ print(10.1);
double print(double d){return 3.14;} // public static void print(double d){}
이 두 가지의 경우 반환값이 double과 void 로 다르기 때문에 중복정의가 가능하다고 생각하기 쉽지만
자바 입장에서는 구분을 못한다.
왜냐면 위 아래 경우 모두 equal대입연산자의 왼쪽부분인 print(10.1); 은 같기 때문이다. 즉 매개변수 부분이 같다.
따라서 반환자료형 상관없이 넘겨주는 매개변수가 같으면 메소드 중복정의는 불가능하다.
*/
}