개발/JAVA

오버로딩

에크키키 2022. 7. 11. 12:54

한 클래스 내에 같은이름의 메서드를 여러개 정의 하는 것 ex)println메서드

 

오버로딩 조건

1.메서드 이름이 같아야한다.

2.매개변수의 개수 또는 타입이 달라야한다.(반환타입은 아무런 영향을 주지않음)

 

오버로딩 예X 반환타입은 영향을 주지않음.
int add(int a ,int b){return a+b;}
long add(int a, int b){return (long)(a+b);}

오버로딩의 예- 같은 일을 하지만 매개변수를 다르게
long add(int a, long b){retrun a+b;}
long add(long a,int b){return a+b;}

 

실행결과

int add(int a, int b) - mm.add(3,3) 결과 :6  

public class OverloadingTest {

	public static void main(String[] args) {
	
		MyMath3 mm= new MyMath3();
		System.out.println("mm.add(3,3)결과:" + mm.add(3,3));
		// 위의 문장을 두문장으로 표현하면
		// int result =mm.add(3,3);
		// System.out.println("mm.add(3,3)결과:"+ result;
		System.out.println("mm.add(3L,3)결과:" + mm.add(3L,3));
		System.out.println("mm.add(3,3L)결과:" + mm.add(3,3L));
		System.out.println("mm.add(3L,3L)결과:" + mm.add(3L,3L));
		
		int [] a = {100,200,300};
		System.out.println("mm.add(a)결과 :"+mm.add(a));

	}

}// add 메서드의 printf가 먼저 출력, println메서드 출력하려면 add메서드 결과가 먼저 계산되어야 하기 때문


class MyMath3{
	int add(int a,int b) {
		System.out.print("int add(int a, int b)-");
		return a+b;
	}
	
	long add(int a,long b) {
		System.out.print("int add(int a, int b)-");
		return a+b;
		
	}
	
	long add(long a,int b) {
		System.out.print("int add(int a, int b)-");
		return a+b;
	}
	
	long add(long a,long b) {
		System.out.print("int add(int a, int b)-");
		return a+b;
	}
	
	int add(int[] a) {//배열의 모든 요소의 합을 결과로 돌려준다.
		System.out.print("int add(int[] a)-");
		int result=0;
		for(int i=0;i<a.length;i++) {
			result += a[i];
		}
		return result;
	}
}