게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
자바 인터페이스 중 상수필드에 대해 궁금한게 있습니다.
게시물ID : programmer_5208짧은주소 복사하기
작성자 : 동쪽의호수
추천 : 0
조회수 : 390회
댓글수 : 2개
등록시간 : 2014/08/29 13:53:39
(빨간색 부분이 제가 궁금한 부분입니다.)
우선 아래와 같이 인터페이스를 만든다음

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이 되는거 같은데 제 생각이 맞는지요??
고수님들 조언 부탁드립니다.
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호