인터페이스를 이용한 다형성

0
  • 인터페이스도 구현 클래스의 부모?
    : 명확히 말하면 아니지만, 가능하다.
class Fighter extends Unit implements Fightable {  // Unit 클래스 상속, Fightable 인터페이스 구현
	public void move(int x, int y) {}
    public void attack(Fightable f) {}
}

Unit u = new Fighter();  // 다형성
Fightable f = new Fighter();

(중요!!) 인터페이스 타입의 매개변수는 인터페이스 구현한 클래스의 객체(인스턴스)만 올 수 있다.

interface Fightable {
	void move(int x, int y);
    void attack(Fightable f); //매개 변수 Fightable타입이 인터페이스 
  // attack메소드는 매개변수로 Fightable 인터페이스를 구현한 클래스 객체만 받겠다.
} 

인터페이스를 메소드의 리턴타입으로 지정할 수 있다.

Fightable method() {  // 리턴타입 : 인터페이스
	Fighter f = new Fighter(); // fighter객체가 Fightable을 구현.
    return (Fightable) f; // fighter 객체를 반환.
위의 두 문장은 return new Fighter(); 와 같다.

⇒ 메소드의 리턴타입에 인터페이스가 오는 것? Fightable 인터페이스를 구현한 클래스의 인스턴스를 반환한다.
→ 원래 반환타입하고 반환값이 같아야하는데, fighter(자손)가 Fightable(조상)로 형변환 가능하기 때문에 괜찮음.

출처

  • 자바의 정석 기초편 - ch 7-38
profile
백엔드를 공부하고 있습니다.

0개의 댓글