다형성을 이해하기위해 이번에도 코드를 작성해보자
우선 바텀업방식으로
사람과 호랑이의 서로의 공통점을 찾아보자
사람과 호랑이는 둘다 걸을수있지만
두발로 걷느냐 네발로 걷느냐의 차이점이있다
그걸 오버라이드로 수정을 하고
공통점만을 Animal이라는 클래스에 저장을 해보자
우선 움직이는 메소드 mover와 먹는 메소드 eating을 간단하게 만들어 보았다
이제 이 메소드들을 Human과 Tiger에게 상속시켜주고 오버라이드로 메소드를 수정해보자
오버라이드를 통해 메소드들을 수정하고 추가해보았다
호랑이 클래스도 같은방식으로 수정해보자
이제 다향성을 실험하기위해 Animal이라는 데이터타입으로 human과 tiger의 객체를만들면
어떻게 출력이 되는지 알아보도록 하겠다.
애니멀클래스의 데이터타입을 가지고 있는 애니멀의 객체를 animal이라고 선언하고
메소드를 호출해보자
정상적으로 애니멀의 메소드들이 출력된다
그렇다면 애니멀클래스의 데이터타입을 가진 Tiger의 객체는 어떻게 출력이 될까?
신기하게도 타이거에서 오버라이드한 출력값이 출력된다
즉 데이터타입(메소드,멤버변수)는 Animal을 따르지만 출력되는 결과는
Tiger의 오버라이드 결과에 따라 바뀌게 된다
이러한 과정을 업캐스팅 이라고 한다
이제는 휴먼에만 추가해둔 readBooks라는 메소드는 어떻게 출력이 될까?
빨간줄이뜨며 컴파일과정에서 컴퓨터가 찾지못한다
데이터타입은 Animal이기 때문에 Animal에있는 메소드만을 호출할수있기때문이다.
그렇다면 human에있는 readBooks메소드는 호출을 못하는건가?
그건아니다 이럴때에 쓸수있는것이 다운캐스팅이다
다운캐스팅을 이용해 데이터타입을 Human클래스로 강제 형변환시켜보았다
결과값이 어떻게 나왔을까?
'Java' 카테고리의 다른 글
추상클래스 (1) | 2024.04.26 |
---|---|
다형성의 활용(연습문제) (0) | 2024.04.24 |
연관관계 (0) | 2024.04.24 |
포함관계(Composition) (0) | 2024.04.23 |
상속 (0) | 2024.04.23 |