7-38 인터페이스를 이용한 다형성

oyeon·2021년 1월 1일
0

(완)객체지향 개념

목록 보기
34/37
  • 인터페이스도 구현 클래스의 부모? -> 같다고 봐도 무방
  • 인터페이스 타입 매개변수는 인터페이스 구현한 클래스의 객체만 가능

구현

interface Fightable {
    void move(int x, int y);  // public abstract가 생략됨
     // ※ 매개변수로 Fightable 인터페이스를 구현한 클래스의 인스턴스만 가능
    void attack(Fightable f); // public abstract가 생략됨
}

class Fighter extends Unit implements Fightable{
    // 오버라이딩 규칙 : 조상(public)보다 접근제어자가 범위가 좁으면 안된다.
    public void move(int x, int y) { /* 내용 생략 */ }
    public void attack(Fightable f) { /* 내용 생략 */ }
}

사용

Unit u = new Fighter();
// 인터페이스 타입의 참조변수로 인터페이스를 구현한 객체를 가리키는게 가능하다.
 Fightable f = new Fighter();

f.move(100, 200);
f.attack(new Fighter());
  • 인터페이스를 메서드의 리턴타입으로 지정할 수 있다.
// Fightable 인터페이스를 구현한 클래스의 인스턴스를 반환
Fightable method() {
    ...
    Fighter f = new Fighter();
    return f; // 인터페이스를 구현한 객체를 반환. return (Fightable)f; OK
    // return new Fighter(); // 위 두 문장을 한 문장으로 바꾼 코드
    
    // 다음과 같이 작성도 가능
    // Fightable f = new Fighter(); // Fightable f = (Fightable)new Fighter(); OK
    // return f;
    
    
    
    // Fightable f = method(); -> Fightable f = new Fighter();
}
profile
Enjoy to study

0개의 댓글