1. 오버라이딩(Overriding)
교재 p.
1️⃣ 오버라이딩이란?
상속 관계에서 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것
부모의 메서드를 무효화
override : 무시하다
2️⃣ 오버라이딩 기본 조건(핵심)
항목 | 조건 |
상속 관계 | ⭕ |
메서드 이름 | 동일 |
매개변수 | 동일 |
반환 타입 | 같거나 하위 |
접근 제한자 | 같거나 더 넓게 |
➡️ 모든 조건을 반드시 만족해야 함
❌ 오버라이딩 불가한 경우
- static 메서드
- final 메서드
- private 메서드
3️⃣ 예제
class Animal {
void sound() {
System.out.println("동물 소리");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("멍멍");
}
}Animal a = new Dog();
a.sound(); // 멍멍➡️ 동적바인딩(메서드가 어느 클래스의 것이 실행될지 ‘실행 시점’에 결정됨)
4️⃣ 실습
package ex06.ch02;
class Car {
void run(){
}
}
class Morning extends Car {
void run(){
System.out.println("모닝 달린다.");
}
}
class Sonata extends Car {
// 부모의 메서드를 재정의하면
// 자식이 부모의 메서드를 오버라이드한다.
// 오버라이드 : 무시하고 대신한다.
void run(){
System.out.println("소나타 달린다.");
}
}
public class ExMeh01 {
public static void main(String[] args) {
Morning a1 = new Morning(); // [Morning(v), Car]
a1.run(); // "모닝 달린다." 출력
Car a2 = new Sonata();
a2.run(); // "소나타 달린다." 출력
}
}추상화로 타입을 일치시키면 자식의 상태 접근이 안됨
오버라이드를 통해서 부모를 바라봐도 자식의 상태에 간접적으로 접근할 수 있음(getter, setter)
추상클래스(abstract class), 추상메서드(abstract + 메서드)
Share article