본문 바로가기

📚Study Note/JAVA

[ JAVA ] 메소드 오버로딩 (Method Overloading) 이 가능한 경우와 아닌 경우

/*====================================================
 ■■■  메소드 중복정의(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); 은 같기 때문이다. 즉 매개변수 부분이 같다. 

따라서 반환자료형 상관없이 넘겨주는 매개변수가 같으면 메소드 중복정의는 불가능하다. 


*/
}