본문 바로가기
Back-End/Java

[Java] 상속_메소드 재정의(method overriding)

by 찐코딩 2021. 8. 17.

메서드 재정의(method overriding)

- 부모 클래스에서 정의한 메서드를 자식클래스에서 다시 작성(재정의)하는 것

- 부모 클래스에 정의 된 메서드 중 하위 클래스와 기능이 맞지 않거나 추가 기능이 필요한 경우 같은 이름과 매개변수로 하위 클래스에서 재정의 함  === > 메서드 오버라이딩


   

[메서드 재정의 특징]

  1. 반드시 상속관계에서만 발생함
     (↔ 메서드 다중정의 - 동일한 클래스에서 발생)
  2. 부모 클래스의 원형 메서드를 자식 클래스에서 재정의(다시 작성)


   

[메서드 재정의 조건]

  1. 반드시 접근 지정자, 리턴타입(반환형), 매개변수 모두 일치해야 함.
     (<-> 메서드 다중정의 - 매개변수의 갯수가 다르든지, 자료형이 다르든지 해야함.)
  2. 접근지정자는 확장은 가능, 축소는 불가능.

 

@Override

ctrl+space를 통해 자동으로 부모 클래스의 메소드를 오버라이딩 할 수 있다.

이 표시가 있으면 오타 방지를 해준다. 부모클래스에 있는 메소드를 감지해준다.

 

package overriding;

// 부모 클래스
class Animal {
	
	void sound() {
	System.out.println("소리를 냅니다.");
}

	void color() {
	System.out.println("검정색입니다.");
	}
}

// 강아지 자식클래스
class Dog extends Animal{
	
	//ctrl+space 눌러주면 자동으로 부모클래스의 메소드 오버라이딩
	@Override 
	void sound() {
		// super.sound();
		System.out.println("멍멍멍");	 // 부모 클래스의 원형메소드를 재정의
	}
	
	@Override
	void color() {
		//super.color();
		System.out.println("하얀색입니다."); // 부모 클래스의 원형메소드를 재정의
	}
}


// 호랑이 자식클래스
class Tiger extends Animal {
	@Override
	void sound() {
		System.out.println("어흥어흥"); // 부모 클래스의 원형메소드를 재정의
	}
}


// 고양이 자식클래스
class Cat extends Animal {
	@Override
	void sound() {
		System.out.println("냥냥냥");	 // 부모 클래스의 원형메소드를 재정의
	}
}


public class Ex01_Animal {

	public static void main(String[] args) {

		Dog dog = new Dog();
		dog.sound();
		dog.color();

		Cat cat = new Cat();
		cat.sound();
		
		Tiger tiger = new Tiger();
		tiger.sound();
	}
}

결과

멍멍멍
하얀색입니다.
냥냥냥
어흥어흥

댓글