형식) [접근제한자] default 반환형 메소드형(자료형 변수명, ...) { 명령; 명령; ...}
package xyz.it.realization;
public interface Printable {
// 추상메소드(Abstract Method)
void print();
// 정적메소드(Static Method)
static void power() {
System.out.println("장치의 전원을 켰습니다.");
}
// 기본메소드(Default Method)
default void scan() {
System.out.println("[에러] 스캔 기능을 제공하지 않습니다.");
}
}
package xyz.it.realization;
public class PrintMulti implements Printable {
@Override
public void print() {
System.out.println("[복합기] 문서를 출력합니다.");
}
@Override
public void scan() {
System.out.println("[복합기] 문서를 스캔합니다.");
}
}
package xyz.it.realization;
public class PrintSingle implements Printable {
@Override
public void print() {
System.out.println("[프린터] 문서를 출력합니다.");
}
}
package xyz.it.realization;
public class PrintableApp {
public static void main(String[] args) {
// 부모 참조변수 자식
Printable printOne = new PrintSingle();
Printable.power(); // 인터페이스를 사용하여 정적메소드 호출
printOne.print(); // 묵시적 객체 형변환에 의해 자식클래스의 오버라이딩 선언된 메소드 호출
printOne.scan(); // 부모 인터페이스의 기본메소드 호출
System.out.println("==============================================================");
Printable printTwo = new PrintMulti();
Printable.power();
printTwo.print();
printTwo.scan();
System.out.println("==============================================================");
}
}