java

20. 오버라이딩

dalc3154 2025. 2. 25. 16:56

오버라이딩(Overriding)

자식 클래스가 부모 클래스에서 상속받은 '메소드'를 자신의 상황에 맞게 '재정의'하는것

상속 관계에 있는 클래스들 사이에서 사용함

부모 클래스의 동작을 자식 클래스에서 변경하거나 확장할때 사용

 

예시)

class ParentClass{
	void exercise() {
		System.out.println("달리기를 잘합니다.");
	}
}
class ChildClass extends ParentClass{
//	void exercise() {
//		System.out.println("달리기를 잘합니다.");
//	}

	@Override
	void exercise() {
		System.out.println("달리기도 잘하고 피구도 잘합니다");
	}
}

@Override : 자바에서 제공하는 코드 어노테이션(annotation : 주석)

부모 클래스의 메소드를 자식 클래스에서 재정의 했다는것을 명시적으로 나타냄

생략해도 오류는 나지 않지만(컴파일러가 자동으로 비교해서 상속을 판단함) 명시해주는것이 좋음

 

상속받은 메소드명과 동일한 메소드명을 가진 메소드를 자식 클래스에서 정의하는 경우 자동으로 오버라이딩임을 판단함

 

오버라이딩의 특징

메소드 시그니처가 일치함

>> 부모 클래스의 메소드와 이름, 매개변수 구성이 동일함

>> 반환 타입은 같거나 자동 형 변환이 가능하게 작성

메소드명 바로 위에 @Override 어노테이션을 작성

다형성 구현

>> 하나의 이름으로 여러 기능을 수행하는 코드 작성

재사용성, 확장성 향상

>> 기존의 코드 변경 없이, 새로운 기능 추가와 변경 가능

 

class AnimalClass{
	void sound() {
		System.out.println("동물이 울음소리를 냅니다");
	}
}
class DogClass extends AnimalClass{
	// 코드 어노테이션: 코드에 메타데이터를 제공하는 방법
	
	@Override
	void sound() {
		System.out.println("강아지가 멍멍하고 짖습니다");
	}
}
class CatClass extends AnimalClass{
	@Override
	void sound() {
		System.out.println("고양이가 야옹하고 웁니다");
	}
}

public class D_Overriding {
	public static void main(String[] args) {
		ChildClass childClass = new ChildClass();
		childClass.exercise();// 달리기도 잘하고 피구도 잘합니다
		
		AnimalClass animalClass = new AnimalClass();
		animalClass.sound();// 동물이 울음소리를 냅니다
		CatClass catClass = new CatClass();
		DogClass dogClass = new DogClass();
		
		dogClass.sound();// 강아지가 멍멍하고 짖습니다
		catClass.sound();// 고양이가 야옹하고 웁니다
// 해당 상태나 동작을 반드시 가지지만 상속받는 클래스마다 차이를 두고싶은 경우 사용
	}
}

 

오버로딩과 오버라이드

공통점: 메소드의 이름을 재사용한다

 

차이점

오버로딩: 같은 클래스 내에서 같은 이름을 가진 메소드를 여럿 정의

메소드명은 동일, 매개변수의 타입이나 갯수, 순서 중 적어도 하나 이상이 달라야 함

반환타입 상관 없음

메소드 동작을 다양한 상황에 맞게 조정함

 

오버라이딩: 상속관계에 있는 클래스에서 사용

메소드의 시그니처(반환타입, 이름, 매개변수)가 동일함

메소드의 동작을 변경하거나 확장함

@Override 어노테이션을 사용해 컴파일러에게 전달함

'java' 카테고리의 다른 글

21. 접근 제어자  (0) 2025.02.25
실습) 학생 관리 시스템  (0) 2025.02.25
19. 상속  (0) 2025.02.25
18. 생성자  (0) 2025.02.25
실습) 오버로딩 연습  (0) 2025.02.25