본문으로 바로가기

Java에서는 다중 상속을 지원하지 않는 이유는 무엇일까?

바로 모호성이 발생하기 때문이다. 여기서 모호성이란 무엇이고 어째서 모호성이 발생하면 안되는 것일까?

 

예를 들어 세 개의 클래스 A, B, C가 있고 각각의 클래스는 같은 이름의 필드 멤버 a를 가진다고 가정해 보자.

만약 다중 상속이 가능하여 D라는 클래스가 A, B, C 모두를 상속 받는다면 자식 클래스 D가 가지는 super(부모를 참조하는 참조변수)는 어떤 부모를 가르키는 것일까? 또 부모들이 각각 가진 같은 이름의 필드a에는 어떻게 접근할 것 인가? 이러한 문제가 모호성의 문제이다.


또한 자식 클래스에서 어떠한 에러가 발생했을 경우 어떤 곳에서 에러가 발생했는지 찾기가 어렵다.

(상속받은 수많은 클래스의 수많은 필드중 어디가 잘못된 것인지 파악하는데 오래걸림)

 

interface가 상수만을 필드 멤버로 갖는것은 이러한 이유 때문이다.  interface는 다중상속이 가능하다. 그렇기 때문에 인터페이스가 필드 멤버를 가지게 되면 위와같은 문제가 발생하게 된다. 


class A{
    int a;
}
 
class B{
    int a;
}
 
class C{
    int a;
}
 
class D extends A, B, C{            // 다중 상속
    
    public void setA(int param){
        super.a = param;            // super.a는 어떤 클래스의 멤버 변수?
    }
 
    public int caculate(int data){
        return a+data                // a에서 에러 발생시 
    }                                // 어떤 부모 클래스에서 에러가 발생했는지 파악하기 어려움
 
 
}
cs


'Java언어' 카테고리의 다른 글

equals(), toString()  (1) 2018.08.29
Object class의 메소드를 사용할 수 있는 이유?  (1) 2018.08.29
super와super()  (4) 2018.08.21
내부 클래스(inner class)  (0) 2018.08.21
증감연산자의 선위증가 후위증가  (0) 2018.08.21