프로그래밍/Java

자바 - 오버로딩(Overloading)과 오버라이딩(Overriding)

개발계발게발 2021. 6. 2. 17:12
반응형

오버로딩(Overloading), 오버로드

오버로딩 = 동일한 이름의 함수(메소드)를 여러번 정의하고 사용 가능(파라미터의 수, 순서, 타입이 다르다.)

 

메소드는 클래스에서 특정기능을 담당하도록 설계되어있다.

 

컴파일러는 같은 메소드로 중복정의가 있는지 확인한다.

확인 기준 요소

  • 메소드 이름
  • 메소드 파라미터(다시 세가지로 구분) - 파라미터 갯수, 순서, 타입

파라미터 갯수, 순서, 타입
위 세가지 요소를 통칭하여 메소드 시그니처라고 한다.

   

만약 정의된 메소드 이름과 시그니처까지 같다면 같은 메소드로 인식 에러 발생

(만약 시그니처중 하나라도 틀리면 다른 메소드로 인식)

 

이렇게 같은 이름의 메소드를 시그니처만 다르게 해서 정의하는 것을 오버로딩(오버로드)라고한다.

호출시에는 반드시 호출하려는 메소드의 시그니처에 맞게 호출 하여야 한다
   

오버로딩에는 메소드 오버로딩과 생성자 오버로딩이 있지만 둘다 같은 개념이다.

 

오버로딩 예제

 

public class OOP05 {
	public static void main(String[] args) {
		OOP05 oop05 = new OOP05();
		oop05.print(2,1,0);
		oop05.print(1, 1);
		oop05.print(2,1,1);
		
		oop05.plus(10, 20);
		oop05.plus(3.14, (byte)5);
		oop05.plus(3,5,4,1,2,3,4,5,5,4,1,4,5,1,2,3,4,5,6,7,8,3,21);
	}
	
	public void plus(int a, int b) {
		System.out.println(a + b);
	}
    
	public void plus(int a, int b, double c) {
		System.out.println(a + b + c);
	}
    
	public void plus(int a, double b, int c) {
		System.out.println(a + b + c);
	}	
	public void plus(int a, int b, double c, byte d) {
		System.out.println(a + b + c + d);
	}
	
	public void plus(double a, byte b) {
		System.out.println(a + b);
	}
    
	//무한으로 들어온다면
	public void plus(int... is ) {
		int result = 0;
		for (int i = 0; i < is.length; i++) {
			result += is[i];
		}
		System.out.println(result);
	}	
}

오버라이딩(Overriding), 오버라이드

 

부모클래스에서 정의된 메소드나 변수를 자식클래스에서 상속받아 사용할 수 있는데

부모클래스에서 상속받은 메소드를 자식클래스에서 재정의 하여 사용하는 것

 

즉, 상위 클래스에 있는 메소드와 동일한 메소드를 만들어 기능을 재정의 하는것

 

 

반응형