-
[JAVA8]자바의 다중 상속 관련 내용JAVA/in 기초 2014. 12. 19. 13:01728x90
자바7 버젼까지 다중 상속의 개념 보다는 확장이라는 개념이 지배적이었다.
인터페이스를 다중으로 상속받아 좀더 확장된 인터페이스가 되기 때문이다.
그런데 자바8에서는 default method를 이용한 다중상속이 가능하다.
다음은 그 예제를 구현간단하게 구현 하여 보았다.
비행카(PlaneCar) 라는 다중상속을 받은 인터페이스가 있고, 비행기(Plane)와 자동차(Car)라는 인터페이스가 있다 각 인터페이스는 다음과 같은 기능을 가진다.
[비행카 클래스도]
비행카 인터페이스 에서는 다중상속에는 다이아몬드 문제라는 것이 있다, 그것을 어떻게 처리하는지를 보여주기 위해 carry()라는 default method를 추가 하였다.
public interface Plane{ default void fly(){ System.out.println("I can fly."); } default void carry(){ System.out.println("plane carry"); } }
[PLANE INTERFACE]
public interface Car { default void drive(){ System.out.println("I can drive."); } default void carry(){ System.out.println("car carry"); } }
[CAR INTERFACE]
public interface PlaneCar extends Plane, Car{ @Override default void carry(){ Plane.super.carry(); Car.super.carry(); } }
[PLANECAR INTERFACE]
carry() method의 다이아몬드 문제를 위해 @Override를 통해 처리를 하였다. IDE 툴에서 해당 method를 override 하지 않을 경우 오류가 발생한다.
public class Call implements PlaneCar{ public static void main(String[] arags){ new Call().call(); } public void call(){ fly(); drive(); carry(); } }
[CALL CLASS]
앞으로 설계를 할때 다중 상속이 필요할 경우 위와 같이 처리 할 수 있을 것이다.
다만, java 개발을 하면서 다중 상속에 대한 생각 없이 설계를 했었는데, 고민할 부분이 추가 된거 같기도하다.
뭐.. 그냥 안써도 되겠지만...참고 자료 :
728x90'JAVA > in 기초' 카테고리의 다른 글
[DESIGN PATTERN]시작하기 전에 알아야 할 것들 (0) 2015.01.17 [발번역]언제 ArrayList 대신 LinkedList을 쓰나요? (0) 2014.12.25 [JAVA8]Stream 맛보기 (0) 2014.12.02 스레드 기본(3) (0) 2014.03.05 스레드 기본(2) (0) 2014.03.05