728x90
반응형
package chap8;
/*
* 인터페이스 예제
*
* 인터페이스
* 1. 인터페이스의 멤버는 상수, 추상메서드, default메서드, static 메서드만 가능함.
* 2. 인터페이스의 모든 멤버의 접근제한자는 public임
* 3. 객체화 불가 => 구현클래스의 객체화를 통해서 객체화됨.
* 4. 클래스간의 상속은 단일상속임.
* 인터페이스간의 상속은 다중상속이 가능함.
* 5. 클래스와 인터페이스의 관계는 구현(implements)으로 표현한다.
* => 다중구현이 가능함.
*/
interface Printerable {
// (public static final) int INK = 100; //클래스 멤버인 상수
// public static final 생략이 가능함
// public 어디서든 접근 가능, static 클래스멤버, final 상수
int INK = 100; //클래스 멤버인 상수. Printerable.INK로 호출이 가능
// (public abstract) void print(); //추상메서드
// public abstract 생략이 가능함
// public 어디서든 접근 가능, abstract 추상메서드
void print(); //추상메서드
}
interface Scannerable {
void scan();
}
interface Faxable {
String FAX_NO = "02-1234-5678"; //상수값
void send(String no);
void receive(String no);
}
// 다중상속 (Printerable,Scannerable,Faxable)
interface Complexerable extends Printerable,Scannerable,Faxable{}
// Complexerable 인터페이스를 구현한 구현 클래스
class Complexer implements Complexerable{
int ink; //일반적인 인스턴스변수
Complexer() {
this.ink = INK; //Printerable.INK 가 맞지만 Printerable를 상속받았기때문에 생략가능
}
@Override
public void print() {
System.out.println("종이에 출력합니다. 남은 잉크량:" + --ink);
}
@Override
public void scan() {
System.out.println("이미지를 스캔하여 파일에 저장합니다.");
}
@Override
public void send(String no) {
System.out.println(FAX_NO + "에서" + no + "번호로 FAX를 전송합니다.");
}
@Override
public void receive(String no) {
System.out.println(no + "에서" + FAX_NO + "로 FAX를 받았습니다.");
}
}
public class InterfaceEx1 {
public static void main(String[] args) {
//인터페이스의 객체는 구현클래스의 객체로 생성함
Complexer com = new Complexer();
// Complexerable c = new Complexerable(); //인터페이스이기때문에 객체생성 불가능
// Printerable.INK = 200; //상수값은 변경 불가
System.out.println("기본잉크량 :" + Printerable.INK);
System.out.println("기본잉크량 :" + Complexerable.INK);
System.out.println("기본잉크량 :" + Complexer.INK);
System.out.println("FAX 번호 :" + Faxable.FAX_NO);
System.out.println("FAX 번호 :" + Complexerable.FAX_NO);
System.out.println("FAX 번호 :" + Complexer.FAX_NO);
com.print();
com.scan();
com.receive("02-5678-1234");
com.send("02-5678-1234");
if(com instanceof Complexerable) {
System.out.println("===com 객체는 Complexerable 객체임.");
Complexerable c = com; //자동 형변환.
c.print();
c.scan();
c.receive("02-5678-1234");
c.send("02-5678-1234");
//ink는 Complexer의 멤버이므로, Complexerable에서 사용 할 수 없다.
//Complexerable 형의 참조변수
// System.out.println("남은 잉크 :" + c.ink);
}
if(com instanceof Printerable) {
System.out.println("===com 객체는 Printerable 객체임.");
Printerable p = com; //자동 형변환.
//p참조변수로 참조가 가능한 멤버의 갯수 : 2개
p.print();
// p.scan();
// p.receive("02-5678-1234");
// p.send("02-5678-1234");
System.out.println("전체 잉크량 :" + p.INK);
// System.out.println("남은 잉크량 :" + p.ink);
}
if(com instanceof Scannerable) {
System.out.println("===com 객체는 Scannerable 객체임.");
Scannerable s = com; //자동 형변환.
//p참조변수로 참조가 가능한 멤버메서드의 갯수 : 1개
// s.print();
s.scan();
// s.receive("02-5678-1234");
// s.send("02-5678-1234");
// System.out.println("전체 잉크량 :" + s.INK);
// System.out.println("남은 잉크량 :" + s.ink);
}
if(com instanceof Faxable) {
System.out.println("===com 객체는 Faxable 객체임.");
Faxable f = com; //자동 형변환.
//f참조변수로 참조가 가능한 멤버메서드의 갯수 : 2개
// f.print();
// f.scan();
f.receive("02-5678-1234");
f.send("02-5678-1234");
// System.out.println("전체 잉크량 :" + f.INK);
// System.out.println("남은 잉크량 :" + f.ink);
}
if(com instanceof Object) {
System.out.println("===com 객체는 Object 객체임.");
Object o = com; //자동 형변환. 참조할수는 있지만 형변환은 안됨.
//o참조변수로 참조가 가능한 멤버메서드의 갯수 : 0개
// o.print();
// o.scan();
// o.receive("02-5678-1234");
// o.send("02-5678-1234");
// System.out.println("전체 잉크량 :" + o.INK);
// System.out.println("남은 잉크량 :" + o.ink);
System.out.println(o.toString());
}
}
}
728x90
반응형
'study > Java' 카테고리의 다른 글
| [Java] 24. Interface3 (매개변수로 사용되는 인터페이스) (0) | 2022.03.22 |
|---|---|
| [Java] 24. Interface2 (리턴타입이 인터페이스인 경우) (0) | 2022.03.22 |
| [Java] 23. 제한자 Exam1 (ARR 배열에 생성자에서 1부터 주어진 숫자까지의 값을 저장하기) (0) | 2022.03.21 |
| [Java] 23. final3 (0) | 2022.03.21 |
| [Java] 23. final2 (0) | 2022.03.21 |