본문 바로가기
프로그래밍 언어/자바의 정석 기초편

자바의 정석 기초편 ch7-38인터페이스와 다형성

by life grow 2023. 3. 1.

다중 상속의 문제: 충돌

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(); 이 생략된 것이다.