JAVA

인터페이스의 다형성

jojelly 2020. 9. 6. 19:09
반응형

인터페이스를 이용해 다형성이 가능하다.

인터페이스 타입의 참조변수로 이를 구현한 클래스의 인스턴스를 참조할 수 있으며, 인터페이스 타입으로의 형변환도 가능하다.

 

ex)

Fightable f = (fightable)new fighter();

또는

Fighteable f = new fighter();

 

이에 따라 인터페이스는 메서드의 매개변수의 타입으로 사용될 수 있다. 

 

ex)

void attack (fightable f) {

//

}

 

위의 코드를 분석해보면 

attack메서드 호출시 fightable 인터페이스를 구현한 fighter클래스의 인스턴스를 매개변수로 제공해야한다.

 

 

  • 리턴타입이 인터페이스의 참조변수일 경우 메서드가 구현 클래스의 인스턴스를 반환한다는 의미이다.
  • 인터페이스를 구현한 클래스의 자식클래스 또한 사용이 가능하다.

 

 

  • 인터페이스의 다형성에서는 인터페이스타입의 매개변수를 선언하고 호출할 때 인수에 구현 객체를 대입하는 방식으로 사용한다. 

 

  • 매개변수의 타입이 인터페이스일 경우 어떠한 구현 객체도 인수로 사용가능하다.
  • 그리고 구현 객체에 떄라 메소드의 실행결과가 달라진다. 

강제타입변환

 

구현객체가 인터페이스 타입으로 자동타입변환시 인터페이스에 선언된 메소드만 사용이 가능하다.(제약이 따른다)

ex. 인터페이스에는 세 개의 메소드가 선언되어 있고, 클래스에는 다섯개의 메소드가 선언되어 있다면, 인터페이스로 호출 가능한 메소드는 세 개 뿐이다

 

이에 대한 대안방법으로 강제타입변환이 있다. 

강제타입 변환 기능을 이용해 다시 구현 클래스 타입으로 변환 후 구현 클래스의 필드와 메소드를 사용할 수 있게 한다.

 

반응형