상세 컨텐츠

본문 제목

Extends(상속)와 Implement(구현)

청강컴정/소프트웨어공학

by luckey 2009. 3. 23. 21:30

본문


JAVA는 다중상속을 허용하지 않는다. (하지만 C++은 다중상속을 지원한다.)
JAVA는 C++보다 나중에 나온 언어로써 이전에 C++의 다중상속의 문제점(프로그래머가 예상치 못했던 부작용과 각종 충돌상황등)을 해소하기 위해 다중상속을 금지하고 다중상속을 하기 위해서 Implement라는 Interface를 넣게 된다.

일반적으로 상속이 가능한 Class는 해당 Class안에 각종 변수, 상수, Method들을 가질 수 있으나 Interface는 상수와 추상 Method만 사용이 가능하다.

Extends(상속) - 부모로부터의 상속[순수상속]
나의 부모가 부자라면 내가 부모로부터 상속받아 나도 부자로 살수 있다.!! 즉 다른것에서 부터 기능을 받아 내것처럼 사용한다고 생각할 수 있을 것이다.

Interface - 조언자로부터의 상속[구현상속]
상속은 받되 그 내용이 비어있어서 그 내용을 꼭 채워서 써야하는 것을 말한다.

* 세상의 모든 자식들은 하나의 부모를 가진다. 그래서 Extends를 이용해서 하나의 Class를 상속받는것이다.
* 세상을 살아가는데 조언자는 여럿 만날수 있다. 이들은 고기잡는법은 알려주지만 고기를 잡아서 주지는 않는다.

추상메소드(Abstrict)
Interface에 있는 모든 Method들은 Abstrict Method 이다.
위에서 설명한대로 조언자로부터의 상속(상속은 받되 그 내용이 비어있다.)이기 때문에 반드시 재정의를 해서 사용해야 한다.
Interface에 속한 Method들은 Abstrict속성을 부여하지 않더라도 무조건 Abstrict Method 인 것이다.

class MainCard extends Card implements Runnable

위와같이 클래스를 선언했다고 가정햇을경우 extends(상속) 은 Card를 하였고 interface는 Runnable 라는 것을 사용한 것을 알 수 있다.
Card Class에 보면 Paint라는 Abstrict 속성의 Method가 존재하는 것을 확인할 수 있다.
그렇다면 MainCard Class 안에는 반드시 Paint 라는 Method를 재정의해서 사용해야 할 것이다.

또한 Runnable 라는 Interface 에는 run 이라는 Method 가 있는데 아까 위에서 설명한 것처럼 Interface 내에 선언된 모든 Method는 Abstrict Method 이기 때문에 반드시 run 이라는 Method를 재정의 해서 사용하여야 하는 것이다.

또한 JAVA는 다중상속이 불가능하기 때문에 extends 뒤에는 반드시 하나의 Class 만 존재하여 하지만 implements 뒤에는 여러개의 Class가 존재해도 상관없다.
또한 Implements 뒤에 작성된 Class에 포함된 모든 Method 들은 재정의 해서 사용하여야 한다.


관련글 더보기

댓글 영역