특별한 일상

[java] 오버로딩, 오버라이딩 사용법, 차이점 본문

IT•개발 끄적/Java

[java] 오버로딩, 오버라이딩 사용법, 차이점

소다맛사탕 2021. 4. 24. 16:47
반응형

안녕하세요. 소다맛사탕 입니다.

이번 포스팅은 java의 메서드 선언 방식에서 오버로딩(overloading)과 오버라이딩(overriding)의 특징과 차이점을 알아보겠습니다.

 

1. 오버로딩(overloading)

한 클래스 내에 같은 이름의 메서드를 여러개 정의하는 것. (메서드 오버로딩 또는 오버로딩)

1-1. 오버로딩의 조건

  • 메서드 이름이 같아야 함
  • 매개변수의 갯수 또는 타입이 달라야 함

; 반환 타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다.

 

1-2. 오버로딩의 장점

  • 메서드들이 하나의 이름으로 정의될 수 있음.
  • 메서드의 이름을 절약할 수 있음.
class TestOverloading {
  public static void main(String args[]) {
    Overloading01 ol01 = new Overloading01();
    System.out.println(ol01.add(1, 1));
    System.out.println(ol01.add(1L, 1));
    System.out.println(ol01.add(1, 1L));
    System.out.println(ol01.add(1L, 1L));
    
    int[] a = {100, 200, 300};
    System.out.println(ol01.add(a));
  }
}

class Overloading01 {
   int add(int a, int b) {
      return a + b;
   }
   
   long add(int a, long b) {
      return a + b;
   }
   
   long add(long a, int b) {
      return a + b;
   }
   
   long add(long a, long b) {
      return a + b;
   }
   
   int add(int[] a) {
      int result = 0;
      for(int i = 0; i < a.length; i++){
         result += a[i];
      }
      return result;
   }
}


>> 결과
>> 2
>> 2
>> 2
>> 2
>> 600

 

 

2. 오버라이딩(overriding)

조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것.

2-1. 오버라이딩의 조건

; 자손 클래스에서 오버라딩하는 메서드는 조상 클래스의 메서드와

  • 이름이 같아야 함
  • 매개변수가 같아야 함
  • 반환타입이 같아야 함
/**
 * 접근 제어자는 조상 클래스의 메서드보다
 * 좁은 범위로 변경할 수 없다.
 */
 //// 접근 제어자의 접근 범위 ////
 // public, protected, (default), private
 
/**
 * 조상 클래스의 메서드보다
 * 많은 수의 예외를 선언할 수 없다.
 */
 //// 모든 예외의 최고 조상인 Exception을 쓰면
 //// 조건을 만족하지 못할수 있다.
 
 /**
 * 인스턴스메서드를 static 메서드로 또는
 * 그 반대로 변경할 수 없다.
 */

 

오버로딩 VS 오버라이딩

오버로딩은 기존에 없는 새로운 메서드를 추가하는 것.

(추가. NEW)

오버라이딩은 조상으로부터 상속받은 메서드의 내용을 변경하는 것.

(변경, MODIFY, CHANGE)

class Info {
	void nameMethod() {
	}
}

class detailInfo extends Info {
	// 오버라이딩(overriding)
	void nameMehtod() {
	} 
	
	// 오버로딩(overloading)
	void nameMethod(String nm) {
	}
	
	void phoneMethod() {
	}
	
	// 오버로딩
	void phoneMethod(int i) {
	}
	// 중복 정의 에러.
//	void phoneMehtod() {
//	}
}
Comments