다중 상속의 문제: 충돌
Unit, Fightable에도 attack(){}이라는 메서드가 있다면
어떤 걸 물려받아야 할지 모른다.
그러나 Fightable은 추상메서드를 가지므로 {} 구현부가 없어서
충돌 문제가 안생긴다.
인터페이스 타입 참조변수로 그 인터페이스를 구현한 객체를 가리키는 게 가능하다.
Fightable f로 Fighter() 객체를 가리키는 것이 가능하다.
대신 Fightable에 정의된 메서드 멤버 2개만 사용 가능하다.
Fightable리모컨에는 move, attack밖에 없으니까
매개변수의 타입이 인터페이스라는 것은 그 인터페이스를 구현한 클래스의 객체만 가능하다는 뜻이다.
attack메서드는 매개변수로 Fightable인터페이스를 구현한 클래스의 객체만 받겠다는 뜻이다.
반환 타입이 Fightable인터페이스라는 것은
Fightable인터페이스를 구현한 인스턴스를 반환한다는 뜻이다.
Fighter가 Fightable의 자손이라 형변환이 가능하다.
Fighter -> Fightable
인터페이스의 모든 메서드는 public abstract. 예외 없이
Unit2에는 attack이 없어서 쓸 수 없다.
실습
Unit2에는 attack() 메서드가 없어서 사용할 수 없다.
Fightable getFightable()의 반환타입하고 Fightable f2 = f.getFightable(); 의 참조변수의 타입이 같아야 한다.
Fightable f = new Fighter();에서 new 앞에 Fightable f =(Fightable) new Fighter(); 이 생략된 것이다.
'프로그래밍 언어 > 자바의 정석 기초편' 카테고리의 다른 글
자바의 정석 기초편 ch7-39 인터페이스의 장점1 (0) | 2023.03.01 |
---|---|
자바의 정석 기초편 ch7-35~37 인터페이스의 선언, 상속, 구현 (0) | 2022.10.24 |
자바의 정석 기초편 ch7-33,34 추상클래스의작성2 (0) | 2022.10.24 |
자바의 정석 기초편 ch7-33,34 추상클래스의 작성1 (0) | 2022.09.30 |
자바의 정석 기초편 ch7-31,32 추상 클래스, 추상 메서드 (1) | 2022.09.30 |