한 클래스 내부에서 동일 이름의 메서드 여러개를 정의하는것(동명이인 같은것)

 

성립조건

1.메서드의 이름이 같아야한다 (동명이인이면서)

2.매개변수 개수, 타입이 달라야한다 (무언가 특정할만한게 다를것 -> 사람이 주민번호까지 다 똑같으면 그건 동일인물이다...)

3.반환타입은 영향이 없다

//"옆반 키작은 A말고 키큰 A한테 쌤이 불렀다고 말해줘!"

 

//오버로딩X (단순 중복정의)
int add (int a, int b) {return a+b;}
int add (int a, int b) {return a+b;}

//오버로딩O (ambiguous 에러 나올수도 있음)
int add (int a, long b) {return a+b;}
int add (long a, int b) {return a+b;}

//에러용 코드
//add(3,3) -> ambiguous 에러발생
add(3l,3)	//정상작동
add(3,3l)	//정상작동

상단 코드에서 차이점은 값을 받는 파라미터(매개변수)가 다르기 때문에 오버로딩이 성립한다.

여기서 ambiguous(모호한) 에러란 컴퓨터가 어떤 코드를 사용하려고 할때 어떤것을 활용해야할지 모르는경우 이렇게 바뀌는것인데 에러용 코드를 보며 설명하겠다.

 

나와 동명이인이 있더라도 그사람만 갖고있는 특징(옷,주민번호,성별 등)을 말하면 누구를 뜻하는지 알수 있는데 여기서 컴퓨터는 파라미터를 다르게 주어지더라도 Casting(강제타입변환) 기능으로 인하여 발생하는 문제이다.

 

Casting(강제타입변환) -> 기본형이 같은 타입끼리 자동적으로 변환하여 다형성을 유지하는 목적(Long->int(O) // String -> char(O) // Long->char(X))

(캐스팅에 관한건 다른 게시글에서 다룰예정입니다)

 

//메서드 오버로딩 예시
//이름같음, 매개변수 다름, 전부 더하는 기능을 수행

calss MyMath3 {

	//예시1
	int add(int a, int b){
    System.out.print("int add(int a, int b - ");
    return a+b;}

	//예시2
    long add(long a, long b){
    System.out.print("long add(long a, long b - ");
    return a+b;}
    
    //예시3
	int add(int [] a){
    System.out.print("int add(int[] - ");
    int result =0;
    for (int k =0; k<a.length; k++){
    	result += a[i];
    return result;}

}

 

여담으로 말하자면 오버로딩의 종류는 3가지가 있다

 

메서드 오버로딩 - 지금까지 상단에서 다룬것이 메서드 오버로딩이다

 

생성자 오버로딩

// 생성자 오버로딩
public class Test{
    String x;
    int y;
    public Test(){			//A
      System.out.println("변화없음");}
      
    public Test(String x) {		//B
         this.x = x;
         System.out.println("x의 값이 "+ x+"로 초기화 되었다.");}
         
    public Test(Sting x, int y) {	//C
         this.x = x;
         this.y = y;
         System.out.println("x의 값이 "+x+", y의 값은 "+y+"로 초기화 되었다.");}
         
 }
 
// 오버로딩된 생성자 사용
public class ConstructorOverloading {
    public static void main(Stirng args[][) {
        Test test1 = new Test();		//A
        Test test2 = new Test("Hi");		//B
        Test test3 = new Test("Hi", 1234);}	//C
}

 

연산자 오버로딩

"+"를 예시로 들면 3가지 기능을 담당하는데 이것을 연산자 오버로딩이라 칭한다.

1. 텍스트를 연결시켜주는 기능

2. 사칙연산을 도와주는 덧셈기능

3. 부호연산자 기능

//1번 예시 - 텍스트 연결
int test1 = 1000;
system.out.println("오늘 배추 가격은 "+test1+"원 입니다!");

//2번 예시 - 사칙연산
int test2 = test1 + 500;

//3번 예시 - 부호연산자
int test3a = +100;	//양수100
int test3b = -100;	//음수100
}

 

'JAVA' 카테고리의 다른 글

중첩클래스  (0) 2023.02.21
생성자(Constructor)와 this  (0) 2023.02.06
매개변수  (0) 2023.01.31
메서드  (0) 2023.01.30
클래스 변수,인스턴스 변수  (0) 2023.01.30

+ Recent posts