추상 메소드만 담고 있는 인터페이스
interface Printable {
public void print(String doc); // 추상 메소드
}
인터페이스의 정의! 메소드의 몸체를 갖지 않는다.
따라서 인스턴스 생성 불가! 참조변수 선언 가능!
class Printer implements Printable {
public void print(String doc) {
System.out.println(doc);
}
}
인터페이스를 구현하는 클래스!
구현하는 메소드와 추상 메소드 사이에도 메소드 오버라이딩 관계 성립, 따라서 @Override 붙일 수 있음
Printable prn = new Printer();
prn.print( "Hello" );
인터페이스형 참조변수 선언 가능
Printer 클래스안에 메서드를 정의하고 싶을때
인터페이스인 Printable에 메소드를 정의하고 Printer 클래스에서 구현하는 형태로 정의하는 이유
-> 이 클래스 인스턴스를 생성해서 접근할때에는 인터페이스를 통해서 접근을 하라는 뜻임.
Printable prn = new Printer();
인터페이스 안의 추상 메서드를 통해서만 인스턴스의 기능을 활용하라는 뜻임.
즉, 인터페이스는 인스턴스의 사용 방법으로 활용 가능한 것임!
상속과 구현
class Robot extends Machine implements Movable, Runnable { ... }
Robot 클래스는 Machine 클래스를 상속한다.
이렇듯 상속과 구현 동시에 가능!
Robot 클래스는 Movable과 Runnable 인터페이스를 구현한다.
이렇듯 둘 이상의 인터페이스 구현 가능!
인터페이스의 본질적 의미
MS에서 제공하는 인터페이스 - 해당 클래스를 사용하기 위한 방법을 제시하는 것임!
interface Printable {
public void print ( String doc );
}
class SPrinterDriver implements Printable {
@Override
public void print( String doc ) { ... }
}
class LPrinterDriver implements Printable {
@Override
public void print( String doc ) { ... }
}
interface Printable { // MS가 정의하고 제공한 인터페이스
public void print(String doc);
}
class SPrinterDriver implements Printable {
@Override
public void print(String doc) {
System.out.println("From Samsung printer");
System.out.println(doc);
}
}
class LPrinterDriver implements Printable {
@Override
public void print(String doc) {
System.out.println("From LG printer");
System.out.println(doc);
}
}
public static void main (String[] args ) {
String myDoc = "This is a report about . . . ";
// 삼성 프린터로 출력
Printable prn = new SPrinterDriver();
prn.print(myDoc);
System.out.println();
// LG 프린터로 출력
prn = new LPrinterDriver();
prn.print(myDoc);
}
'# 02 > Java' 카테고리의 다른 글
[윤성우 열혈자바] 18-1. 자바 예외처리의 기본 (0) | 2019.10.22 |
---|---|
[윤성우 열혈자바] 17-2. 인터페이스의 문법 구성과 추상 클래스 (0) | 2019.10.22 |
[윤성우 열혈자바] 16-2. Object 클래스와 final 선언 그리고 @Override (0) | 2019.10.22 |
[윤성우 열혈자바] 16-1. 상속이 도움이 되는 상황의 소개 (0) | 2019.10.22 |
[윤성우 열혈자바] 15-3. instanceof 연산자 (0) | 2019.10.22 |