Parent parent = new Child(); // 업캐스팅
parent.parentMethod(); // 가능
((Child) parent).childMethod(); // 다운캐스팅 후 자식 메서드 호출 가능
⚠️ 다운캐스팅은 instanceof로 타입 체크 후 사용해야 안전하다.
Employee 클래스 (공통 기능)Developer, Designer: Employee를 상속받고 고유 기능 정의Owner: Employee에게 orderWork(Employee) 메서드를 통해 지시Employee 타입으로 받아서 다양한 하위 객체 처리if (employee instanceof Developer) {
((Developer)employee).develop();
}
Messenger (공통 부모 클래스)User, Admin이 상속받아 sendMessage() 오버라이딩MessageRelay가 메시지를 받아서 Messenger 타입에 따라 전달messageRelay.relay(user, "Hello!"); // 사용자 메시지 출력
messageRelay.relay(admin, "서버 점검 예정"); // 관리자 메시지 출력
하나의 메서드가 여러 객체의 메시지 처리 방식 다르게 실행 = 다형성 활용!
public static int x;
public static void m1() {
System.out.println("static method");
}
Count.x++; // 클래스 변수 증가
c1.y++; // 인스턴스 변수는 객체별로 따로 존재
static double calcCircleArea(double r) {
return pi * r * r;
}
모든 계산기 인스턴스가 동일한 pi 값을 공유함
| 주제 | 핵심 개념 |
|---|---|
| 업캐스팅 | 자식 → 부모 자동 형변환. 부모 멤버만 사용 가능 |
| 다운캐스팅 | 부모 → 자식 수동 형변환. instanceof 필요 |
| 다형성 | 하나의 메서드가 다양한 자식 객체에 대해 다르게 동작 |
| static 필드 | 클래스가 공유하는 변수 |
| static 메서드 | 클래스가 공유하는 기능, 인스턴스 없이 호출 가능 |