녕의 학습 기록

[Java] 메서드 오버라이딩 본문

Dev/Java

[Java] 메서드 오버라이딩

kjyyjk 2022. 7. 11. 23:03

부모 클래스가 자식 클래스에게 상속 할 때에는 필드 뿐만 아니라 메서드까지 넘겨준다.

 

만약 부모 클래스의 메서드가 자식 클래스에 맞게끔 설계되어 있지 않다면, 이 메서드를 다시 수정해 줄 필요가 있다.

 

이러한 경우에 사용하는 것이 바로 메서드 오버라이딩 이다.

 

public class Fruit{
	public void introduce(){
    	System.out.println("I'm fruit");
    }
}
public class Apple extends Fruit{	//Fruit의 자식 클래스 Apple
	public void introduce(){		//Fruit의 introduce 메서드를 오버라이딩을 통해 재정의 했다.
    	System.out.println("I'm apple");
    }
}

lFruit은 Apple의 부모 클래스로 introduce 메서드를 가진다.

 

오버라이딩을 하지 않았다면 Apple 클래스도 같은 동작을 하는 introduce 메서드를 가지지만 ,

 

Apple 클래스에서 오버라이딩을 했기 때문에 자식 클래스의 introduce 메서드는 다르게 동작한다.

 

public class Test {
	public static void main(String[] args) {
    	Apple a = new Apple();
        a.introduce();
    }
}

Test 클래스를 실행하면 결과값으로 " I'm fruit " 이 아닌, " I'm apple " 이 출력된다.

 

 

메서드 오버라이딩 시에는 다음 사항을 주의해야한다.

  • 부모의 메서드와 동일한 리터 타입, 이름, 매개 변수 를 가져야 한다.
  • 접근 제한을 더 강하게 할 수는 없다. ex) 부모는 public , 자식은 private 는 안됨. 반대일 경우 가능.

 

이렇게 오버라이딩을 하면 부모의 메서드를 자식 클래스에서 재정의하여 사용할 수 있다.

 

만약 오버라이딩을 했지만 부모 클래스의 메서드를 써야하는 상황이 온다면 어떻게 해야할까?

 

이 경우에는 ' super ' 를 이용하면 된다.

 

super는 부모 객체를 참조하고 있기 때문에 명시적으로 super를 붙여 부모 메서드를 호출할 수 있다.

 

public class Test {
	public static void main(String[] args) {
    	Apple a = new Apple();
        a.introduce(); // 오버라이딩한 자식 클래스의 introduce 메서드 호출
        super.introduce(); 	// 부모 클래스의 본래의 메서드 호출
    }
}

'Dev > Java' 카테고리의 다른 글

[Java] 접근 제한자 / 싱글톤 패턴 / Getter , Setter  (0) 2022.07.19
[Java] final 키워드  (0) 2022.07.16
[Java] 클래스 상속  (0) 2022.07.08
[Java] 객체 생성과 필드  (0) 2022.07.04
[Java] 객체 지향 프로그래밍의 특징  (0) 2022.07.04