ch7-33 추상클래스의작성
왼쪽 각 클래스의 현재 위치 (x, y)와 move, stop 멤버가 중복되어 Unit 클래스로 중복을 제거한다. Marine, Tank는 지상이고 Dropship은 공중으로 움직이는 move 메서드가 달라 추상 메서드로 만든다.
기존 클래스의 공통 부분을 뽑아서 추상 클래스로 만든다. 공통부분이 꼭 추상 클래스가 되는 것은 아니지만, 공통이 되는 메서드는 구현부는 달라도 선언부는 일치하므로 부분만 추상 메서드로 만든다. 공통인 int x, y;와 void stop()이 제거되고 move 메서드만 구현하면 되므로 코드가 간결해진다.
group의 타입이 Unit이므로 move 메서드를 사용할 수 있다. for문을 통해 실행되는 group[ i ].move(100, 200)은 Unit클래스의 추상 메서드가 호출되는 것이 아니다. Unit 클래스를 상속받은 자손의 구현된 move가 실행된다. 여기서 다형성의 장점으로 모든 객체를 한번에 move 메서드로 움직일 때, move의 구현부가 각각 달라도 즉 구현부를 신경쓰지 않아도 좌표값만 넣으면 일괄적으로 이동이 가능하다.
최고 조상인 Object로 다형성으로 배열을 생성할 수 있다. 하지만 Object 클래스에는 move 메서드가 없어 호출할 수 없다.
'자바 > 자바의 정석 Ch.7 객체지향 프로그래밍 II' 카테고리의 다른 글
ch7-35~37 인터페이스의 선언, 상속, 구현 (0) | 2023.04.24 |
---|---|
ch7-33,34 추상 클래스의 작성2 (0) | 2023.04.22 |
ch7-31,32 추상 클래스, 추상 메서드 (0) | 2023.04.22 |
ch7-29,30 여러 종류의 객체를 배열로 다루기 (0) | 2023.04.21 |
ch7-27,28 매개변수다형성 (0) | 2023.04.20 |