interface Printable {
int x=10;
void print(); // 추상메소드
}
interface Drawable {
void draw(); // 추상메소드
default void msg(){ // Java 1.8 이상에서 제공
System.out.println("Drawable default method");
}
}
interface Showable extends Printable {
// 인터페이스 상속(Inheritance)
void show(); // 추상메소드
}
class Parent {
public void method2() {
System.out.println("This is method2() in Parent Class");
}
}
class Child extends Parent implements Printable, Drawable {
@Override
public void print() { // 인터페이스(추상 메소드) 구현
System.out.println("Hello");
}
@Override
public void draw() { // 인터페이스(추상 메소드) 구현
System.out.println("drawing rectangle");
}
}
class CustomDialog {
// 특정한 Class 내에서만 사용하는 인터페이스를 정의한 걸 중첩 인터페이스라고 한다.
interface CustomDialogListener {
void onAgreeButtonClicked(String smsotp); // 추상 메소드
}
private CustomDialogListener customDialogListener;
public void setCustomDialogListener(CustomDialogListener listener){
customDialogListener = listener;
// 외부에서 구현 객체를 받아서 변수에 저장한다.
}
String smsotp;
public void Cick(){
smsotp = "123456";
customDialogListener.onAgreeButtonClicked(smsotp);
}
}
public class Interface_EX implements Showable {
@Override
public void print() {
System.out.println("print interface method implemented.");
}
@Override
public void show() {
System.out.println("show interface method implemented.");
}
public static void main(String[] args) {
// 객체 생성 1
Child child = new Child();
child.print();
child.draw();
child.msg();
child.method2();
System.out.println(Printable.x);
// 객체 생성 2
Interface_EX interface_ex = new Interface_EX();
interface_ex.print();
interface_ex.show();
// 객체 생성 3
CustomDialog dialog = new CustomDialog();
dialog.setCustomDialogListener(new CustomDialog.CustomDialogListener() { // 익명 구현 객체
// 익명 객체는 클래스를 상속하거나 인터페이스를 구현해야만 생성할 수 있다.
// 익명 객체는 부모 타입 변수에 대입되므로 부모 타입에 선언된 것만 사용할 수 있다.
// 외부에서는 익명 객체의 변수와 메소드에 접근할 수 없다.
@Override
public void onAgreeButtonClicked(String smsotp) {
System.out.println("customdialog result : "+smsotp);
}
});
dialog.Cick();
}
}