728x90
런타임 다형성:
- 상속을 통해 메서드 오버라이딩을 소스코드에 구현해놓고 컴파일 후 실행
- upcasting으로 자식 객체를 부모 객체 자료형에 넣으면 런타임에 동적 바인딩이 일어나서 다형성 실체화
class Animal {
void sound() { System.out.println("동물 소리"); }
}
class Dog extends Animal {
@Override
void sound() { System.out.println("멍멍"); } // 메서드 오버라이딩
}
class Cat extends Animal {
@Override
void sound() { System.out.println("야옹"); } // 메서드 오버라이딩
}
public class Main {
public static void main(String[] args) {
Animal animal1 = new Dog(); // 업캐스팅
Animal animal2 = new Cat(); // 업캐스팅
animal1.sound(); // "멍멍" - 동적 바인딩(런타임에 Dog의 메서드 호출)
animal2.sound(); // "야옹" - 동적 바인딩(런타임에 Cat의 메서드 호출)
}
}
컴파일 타임 다형성:
- 메서드 오버로딩을 소스코드에 구현해놓고 컴파일 후 실행
- 정적 바인딩을 통해 다형성 실체화
class Calculator {
int add(int a, int b) { // 메서드 오버로딩
return a + b;
}
double add(double a, double b) { // 메서드 오버로딩
return a + b;
}
}
public class Main {
public static void main(String[] args) {
Calculator calc = new Calculator();
calc.add(1, 2); // 컴파일 시점에 int 버전 선택
calc.add(1.5, 2.5); // 컴파일 시점에 double 버전 선택
}
}
전부 다 따로따로 머릿속에서 놀던 개념이었는데 이렇게 연결되니까 신기하다.
'객체지향' 카테고리의 다른 글
[객체지향]조합, 위임이 상속을 대체하는가? (0) | 2025.06.06 |
---|