upcasting : 자식 클래스의 인스턴스를 부모 클래스의 타입으로 변환하는 것
downcasting : 부모 클래스의 인스턴스를 자식 클래스의 타입으로 변환하는 것
Animal animal = new Dog() 와 같이 자식 클래스인
Dog
인스턴스를 부모 클래스인Animal
타입으로 할당하는 것이 업캐스팅이다.
Dog dog = (Dog) animal 과 같이 부모 인스턴스인animal
을 다시 자식 클래스인Dog
타입으로 형변환하는 것이 다운캐스팅이다.
다운캐스팅 시 주의점
다운캐스팅 시 반드시 해당 타입으로 형변환이 가능한지 확인해야 한다. 만약 부모 클래스 타입의 인스턴스가 자식 클래스 인스턴스가 아닌 경우 오류가 발생하므로 예외처리를 해줘야 한다.
instanceof
키워드를 통해 animal2가 Dog의 인스턴스인지 확인 후 다운캐스팅을 해준다.하나의 타입이나 메소드가 여러 타입이나 메소드들을 가지거나 실행시키는 능력
업캐스팅을 통한 다형성
부모 클래스 타입이 변수에 자식 클래스 객체를 할당할 수 있다.
이를 통해 동일한 코드를 사용하여 여러 타입의 객체를 처리할 수 있다.
오버라이딩을 통한 다형성
부모 클래스와 자식 클래스 간의 메소드 오버라이딩을 통해, 부모 클래스 타입의 변수를 사용하여 자식클래스의 오버라이딩된 메소드를 호출할 수 있다.
마지막 출력을 보면 동일한 makeSound() 메소드이지만 오버라이딩된 자식 메소드를 호출하므로 각각 출력이 다르게 나오는 것을 볼 수 있다.
(animal1은 Dog 메소드를, animal2는 Cat 메소드를 호출)
이 글은 제게 많은 도움이 되었습니다.