생활
스프링은 다중 상속이 안되나요?
스프링은 다중 상속이 안되나요? 위의 질문 처럼 다중 implement는 되는거 같은데 다중 상속은 안되는거 같아서 질문을 하게되었습니다 implement랑 신ㅇ속의 차이도 궁금합니다
2개의 답변이 있어요!
스프링 프레이워크에서 지원을 하지 않는 것이 아닌 자바 프로그래밍 언어에서 다중 상속을 지원하지 않는 것입니다.
다중 상속의 경우 문제가 많이 있기 때문에 지원하는 언어가 많지 않은 것으로 알고 있습니다.
인터페이스의 경우 구현체는 없이 명세서만 정의하고 implement하는 곳에서 구현을 한다고 보면 좋을 것 같습니다.
java는 클래스와 인터페이스 상속을 지원하는데요
클래스는 다중상속을 지원하지 않고 인터페이스는 다중상속을 지원합니다.
클래스를 다중상속하지 않는 이유는 다이아몬드 문제(Diamond Problem) 때문입니다.
아빠 클래스에 speak()와 엄마 클래스에 speak() 가 존재하고 자식에게 둘다 상속하여 speak()를 하게 된다면
아빠 클래스의 speak()를 호출해야 할지 엄마 클래스의 speak()를 호출해야 하는 정의가 되어 있지 않기 때문에 문제가 발생합니다.
코드로 예를 들어 보겠습니다.
Person class
public abstract class Person { public abstract void speak(); }Father class
public class Father extends Person { @Override public void speak(){ System.out.println("speak implementation of Father"); } }Mother class
public class Mother extends Person { @Override public void speak(){ System.out.println("speak implementation of Mother"); } }Clild class
public class Child extends Father, Mother { public void test(){ // calling super class method speak(); } }인터페이스의 경우 다중 상속에 동일한 메소드가 존재해도 구현부는 하나이기 때문에 가능합니다.
public interface Father { public void speak(); } public interface Mother { public void speak(); } public class Child implements Father, Mother { @Override public void speak(){ System.out.println("speak implementation of parents"); } }