클래스 앞에 붙일경우
상속금지
ex> public final class Test{ }
멤버 메소드 앞에 붙일경우
오버라이딩 금지
ex> public final void print(){}
멤버변수 앞에 붙일 경우--> 상수
ex> public final int PORT_NUMBER=80;
상수화된다. -> 변경금지
1) 일종의 추상클래스. 추상클래스(미완성 설계도)보다 추상화 정도가 높다.
2) 실제 구현된 것이 전혀 없는 기본 설계도.(알맹이 없는 껍데기)
3) 추상메서드와 상수만을 멤버로 가질 수 있다.
- 모든 멤버변수는 public static final 이어야 하며, 이를 생략가능
- 모든 메서드는 public abstract 이어야 하며, 이를 생략가능
4) 인스턴스를 생성할 수 없다.
5) 미리 정해진 규칙에 맞게 구현하도록 표준을 제시하는 데 사용된다
6) class’대신 ‘interface’를 사용한다는 것 외에는 클래스 작성과 동일하다
public interface Lenderable {
// 상태값 표시(상수)
int BORROW = 1; // 빌려간 상태
int NORMAL = 0; // 대여 가능상태
void borrowPossible(String borrower,String date);
void returnPossible();
}
class SeperateVolume implements Lenderable {
String title; // 초기 생성시 값 입력 --> 젊은 베르테르 슬픔
String date; // 2022/07/25
String borrower; // 정승환/박윤하
int status; // 상태값 0
SeperateVolume(String title) {
this.title = title;
}
public void borrowPossible(String borrower, String date) {
if (status != NORMAL) return; //return하면 아래 문장 진행안함
this.date = date;
this.borrower = borrower;
status = BORROW;
// BORROW = 1; 안됨
System.out.println(borrower + "가 "+date+"일에 "+ title + "을 대여했다.");
}
public void returnPossible() {
if (status != BORROW) return;
System.out.println(borrower + "가 "+ title+ " 을 반납했다.");
date = null;
title = null;
borrower = null;
status = NORMAL;
}
}
public class LenderableEX {
public static void main(String[] args) {
SeperateVolume sv = new SeperateVolume("젊은 베르베르 슬픔");
sv.borrowPossible("정승환/박윤하", "2023/07/25");
sv.returnPossible();
}
}
정승환/박윤하가 2023/07/25일에 젊은 베르베르 슬픔을 대여했다.
정승환/박윤하가 젊은 베르베르 슬픔 을 반납했다.