(빨간색 부분이 제가 궁금한 부분입니다.)
우선 아래와 같이 인터페이스를 만든다음
interface Lendable {
byte STATE_BORROWED = 1; //대출중
byte STATE_NORMAL = 0; //대출되지 않은 상태
abstract void checkOut(String aborrower, String date); //대출한다 메소드
void checkIn(); //반납한다 메소드, abstract생략가능-컴파일러가 자동 생성
}
인터페이스를 구현한 클래스를 만듭니다.
class SeparateVolume implements Lendable {
String requestNo; //청구번호
String bookTitle; //제목
String writer; //저자
String borrower; //대출인
String checkOutDate; //대출일
byte state; //대출상태
SeparateVolume(String requestNo, String bookTitle, String writer) {
this.requestNo = requestNo;
this.bookTitle = bookTitle;
this.writer = writer;
}
public void checkOut(String borrower, String date){
if(state != STATE_NORMAL) //Lendable 인터페이스의 상수 필드를 사용
return;
this.borrower = borrower;
this.checkOutDate = date;
this.state = STATE_BORROWED; //Lendable 인터페이스의 상수 필드를 사용
System.out.println("*" + bookTitle +" 이(가) 대출되었습니다.");
System.out.println("대출인: "+borrower);
System.out.println("대출일: " + date + "\n");
}//checkOut
public void checkIn(){
this.borrower = null;
this.checkOutDate = null;
this.state = STATE_NORMAL; //Lendable 인터페이스의 상수 필드를 사용
System.out.println("*"+bookTitle+" 이(가) 반납되었습니다. \n");
}//checkIn
}//class
마지막으로 위 클래스를 실행할 클래스를 만듭니다.
public class InterfaceExample3 {
public static void main(String[] args) {
SeparateVolume obj = new SeparateVolume("863ㅂ", "나무", "베르베르");
printState(obj);
obj.checkOut("이수경", "20060317");
printState(obj);
}//main
static void printState(SeparateVolume obj){
if(obj.state == Lendable.STATE_NORMAL){ //Lendable 인터페이스의 상수 필드를 사용
System.out.println("--------------");
System.out.println("대출상태: 대출가능");
System.out.println("--------------");
}//end if
if(obj.state == Lendable.STATE_BORROWED){ //Lendable 인터페이스의 상수 필드를 사용
System.out.println("--------------");
System.out.println("대출상태: 대출중");
System.out.println("대출인: " + obj.borrower);
System.out.println("대출일: "+ obj.checkOutDate);
System.out.println("--------------");
}//end if
}
}//class
실행결과 입니다.
--------------
대출상태: 대출가능
--------------
*나무 이(가) 대출되었습니다.
대출인: 이수경
대출일: 20060317
--------------
대출상태: 대출중
대출인: 이수경
대출일: 20060317
--------------
제가 궁금한 것은 메인 메소드에서 빨간색으로 표시한 printState(obj); 를 실행하면 왜 대출가능 상태가 나오는지 모르겠습니다.
if(obj.state == Lendable.STATE_NORMAL) 이면 대출가능 상태인데 SeparateVolume클래스의 state변수를 보면 그냥 선언만 되어있고 값은 정해지지 않았습니다. 제 생각에 obj.state를 호출하면 state의 값이 자동적으로 0이 되는거 같은데 제 생각이 맞는지요??
고수님들 조언 부탁드립니다.