녕의 학습 기록
[Java] 메서드 오버라이딩 본문
부모 클래스가 자식 클래스에게 상속 할 때에는 필드 뿐만 아니라 메서드까지 넘겨준다.
만약 부모 클래스의 메서드가 자식 클래스에 맞게끔 설계되어 있지 않다면, 이 메서드를 다시 수정해 줄 필요가 있다.
이러한 경우에 사용하는 것이 바로 메서드 오버라이딩 이다.
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 |