TIL) Java - 오버라이딩(overriding), 오버로딩(overloading)

oatraspberry·2022년 12월 8일
post-thumbnail

오버라이딩(Overriding)

부모 클래스의 메소드가 자식 클래스에서 사용하기에 부적합할 경우 상속받은 조상의 메서드를 자식 클래스에 맞게 변경하는 것(덮어쓰는 것) (change, modify)
부모클래스에게 상속받은 메서드를 재정의하여 사용(덮어쓰기 개념)
부모클래스의 메서드와 시그너처 및 리턴 타입 동일
부모클래스의 메서드보다 접근지정자는 같거나 넓어야 함
상속 받아야만 사용 가능.

*시그너처: 메서드명과 매개변수 타입과 개수

class A {
	void print() {
    	System.out.println("A 클래스");
    }
}

class B extends A {
	void print() {
    	System.out.println("B 클래스");
    }
}

조건

  1. 선언부(반환타입, 메서드 이름, 매개변수 목록)가 조상 클래스의 메서드와 일치해야 한다.
  2. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
  3. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.

메소드의 재정의 방법

  • 부모 메소드와 동일한 시그니처(리턴 타입, 메소드 이름, 매개 변수 목록) 가져야 함
  • 접근 제한 더 강하게 재정의할 수 없음
  • 새로운 예외를 throws 할 수 없음
  • 메소드가 재정의될 경우 부모 객체 메소드가 숨겨지며, 자식 객체에서 메소드 호출하면 재정의된 자식 메소드가 호출됨.

부모 메소드 호출

자식 클래스 내부에서 재정의된 부모 클래스 메소드를 호출해야 하는 경우
명시적으로 super 키워드 붙여 부모 메소드 호출

super.부모메소드();

인스턴스 멤버/STATIC 멤버 오버라이딩

instance 필드 - 오버라이딩X
instance 메서드 - 오버라이딩O->메서드 오버라이딩
static 필드 - 오버라이딩X
static 메서드 - 오버라이딩X

오버로딩(overloading)

한 클래스 내에 같은 이름의 메소드를 여러 번 선언(new)
1. 전달값의 타입이 다르거나
2. 전달값의 갯수가 다를 때

매개값을 다양하게 받아 처리할 수 있도록 하기 위함.
여러개 쓸 수 있음.
상속과는 무관하다.

*메소드 시그너처(method signature): 메소드명, 입력매개변수의 자료형. 메소드를 구분하는 기준 역할.

조건

  • 메서드의 이름이 같아야 한다.
  • 매개변수의 개수 또는 타입이 달라야 한다.
  • 매개 변수의 타입, 개수, 순서가 같은 경우 매개변수 이름이 달라도 메소드 오버로딩이 아니다.
  • 외부에서 제공되는 다양한 데이터 사용하여 객체 초기화하려면 생성자 역시 다양화해야 함.
리턴 타입 메서드명 (자료형 변수명, 자료형 변수명, ...) {
}
// 메서드명, 자료형, 자료형 -> 메소드 시그너처

int sum (int a, int b) {
	return 3;
} // sum, int, int -> 메소드 시그너처
profile
개발자가 될테야

0개의 댓글