JAVA 2011. 8. 19. 00:35
자바에서는 다중 상속을 허용하지 않습니다. 하지만 간혹 이미 다른 클래스를 상속받은 

서브클래스들의 필요한 부분을 모아 따로 슈퍼 클래스를 선언해야 할 상황이 있습니다.



그림과 같이 단행본 클래스와 부록 CD 클래스의 공통적인 기능을 추출하여 인터페이스로 만들 수 

있습니다. 다만 주의 할 점은 공통적인 기능(매소드)은 추출 할 수 있지만 , 공통적인 데이터는 

표현 할 수 없다는 제약이 있습니다. 

저렇게 추출한 인터페이스를 소스로 옮겨보면 


이렇게 됩니다, 클래스 선언과 비슷하지만 class 대신 interface 를 써서 선언합니다. 매소드의 로직은 

구상할 필요가 없는데 인터페이스에 속하는 매소드들은 무조건 추상 매소드로 선언해야 하기 

때문입니다.

이제 이걸 자세히 알아보기 위해 책 대여 클래스와 CD대여 클래스를 만들어 이 둘이 공통으로 쓰는 

기능을 인터페이스하여 어떻게 오버라이딩하는지 알아보겠습니다 


먼저 책 대여 클래스인데요, 번호, 책이름, 저자, 대출인, 대출일, 대출 상태등이 있습니다 

생성자로 먼저 번호와 책이름 , 저자를 받아놓고 checkOut 매소드를 오버라이딩하여 

여기에 실려 넘어오는 대출인과 대출일, 대출 상태등을 담아놓은 후 누가 언제 뭘 빌려갔다라고 

찍습니다.  반대로 checkIn 을 호출하면 대출인과 대출일을 null로 바꾸고 대출상태도 0으로 바꿉니다


이제 시디 대여 클래스인데 얘는 CDInfo 라는 클래스를  이미 상속 받고 있습니다 .


CDInfo는 별거 없고 , 단지 시디 관련 번호와 시디 제목을 담아 놓습니다.

다시 시디 대여 클래스로 가보면 생성자로 시디 번호와 시디 타이틀을 받아 슈퍼클래스인 

CDInfo에 담아 놓습니다. checkOut 과 checkIn은 책 대여 클래스와 기능이 동일합니다. 

단지 책 제목이냐 시디 제목이냐가 다른데요,



 

이제 이것을 실행 해 보면



이렇게 찍히게 됩니다. 

이처럼 라이브러리는 이미 다른 상속을 받고있는 서브 클래스라 하더라도 비슷한 기능을 추출하여

안에 그 기능을 추상 매소드로 만들어 놓음으로써 필요한 클래스들이 얼마든지 implements 하여

오버라이딩 할 수 있다는 장점이 있습니다. 









출판사 : 한빛미디어 , 저자 : 김윤명 님의 뇌를 자극하는 Java프로그래밍에서 공부한 내용입니다. 

'JAVA' 카테고리의 다른 글

JAVA] 현재 날짜, 시간 구하기  (1) 2011.11.30
JAVA] split으로 문자열 나누기  (0) 2011.10.17
JAVA] drawRect 속성 알아보기  (1) 2011.08.18
JAVA] String 원하는 만큼 잘라내기  (0) 2011.08.04
JAVA] 21. 클래스의 상속  (0) 2011.06.22
posted by 젊은쎄오
: