[객체지향] 다형성
- 자바의 모든 클래스들은 기본적으로 Object 클래스로부터 상속받고 있으므로, Object 클래스와 IS-A- 관계가 설정되어있음
- 따라서, 자바의 모든 객체는 자신의 클래스 타입이면서 Object 타입이다.
객체에 접근하는 방법은 참조 변수를 통하는 것!!
- 참조변수는 클래스나 인터페이스를 자신의 타입으로 선언할 수 있다. 참조 변수가 인터페이스 타입으로 선언되면, 그 인터페이스를 구현하는 어떤 클래스의 객체도 참조할 수 있다.
- 자바는 다중 상속이 불가능하다.
class PlayerPiece extends GameShape, Animatable { } // 불가능 !!
그렇다면?
클래스 대신 Animatable 인터페이스를 정의하고, 그것이 필요한 GameShape 서브 클래스에서만 그 인터페이스를 구현하도록 하면 된다.
public interface Animatable {
public void animate();
}
그리고 이 인터페이스를 구현하도록 수정한
class PlayerPiece extends GameShape implements Animatable {
public void movePiece() {
System.out.println("moving game piece");
}
pubic void animate() {
System.out.println("animation. ..");
}
// ...
}
PlayerPiece 객체는 언제든지 다음 4가지 형태로 다형적인 처리(상속받은 메서드의 실행을 다르게 하는)가 가능해진다.
- Object
- GameShape
- PlayerPiece
- Animatable