Language/Java
OOP - 다형성
용용띠용
2025. 4. 15. 17:14
다형성
: 하나의 타입으로 여러 객체를 다룰 수 있는 기능
형변환(Casting)
1. 업캐스팅
: 자식 클래스의 객체를 부모 클래스 타입으로 변환하는 것
- 자동 형변환
Animal animal = new Dog();
특징: 자식 클래스의 고유 기능 사용 불가
=> 부모 클래스의 멤버만 접근 가능
2. 다운캐스팅
: 부모 클래스의 객체를 자식 클래스 타입으로 변환하는 것
- 명시적 형변환: (자식 클래스 타입)
Animal animal = new Dog();
Dog dog = (Dog)animal;
특징: 자식 클래스 고유 기능 사용 가능
다운 캐스팅 유의점
: 잘못된 다운캐스팅 컴파일 단계에서 감지 불가 => 런타임 시점에 ClassCastException 발생
이유: 문법적 에러는 아니기 때문
public class Main {
public static void main(String[] args) {
// 다운 캐스팅
Animal dog = new Dog();
//에러 발생x
Cat cat1 = (Cat) dog;
cat1.scratch(); // 에러 발생
}
}
해결책
: instanceof 사용해 미리 타입 검사
- 객체가 특정 클래스나 인터페이스의 인스턴스인지 확인
public class Main {
public static void main(String[] args) {
Animal animal = new Dog();
// animal이 Cat의 인스턴스인가 확인
if (animal2 instanceof Cat) {
Cat cat = (Cat) animal2;
cat.scratch();
} else {
System.out.println("객체가 고양이가 아닙니다.");
}
}
}