1. μ΅λͺ κ°μ²΄ (class)
: μ΅λͺ κ°μ²΄λ μ΄λ¦μ΄ μλ κ°μ²΄λ₯Ό μλ―Ένλ€. μ΄ λ, ν΄λμ€λ₯Ό μμνκ±°λ μΈν°νμ΄μ€λ₯Ό ꡬνν΄μΌνλ€.
μ΅λͺ κ°μ²΄λ₯Ό μμ±ν λμλ ν΄λμ€ μ΄λ¦μ΄ μλ€.
μ΅λͺ κ°μ²΄κ° μλ, μμ ν΄λμ€λ₯Ό λͺ μμ μΌλ‘ μ μΈνλ μ΄μ λ μ΄λ―Έ μ μΈλ μμ ν΄λμ€λ‘ κ°λ¨ν κ°μ²΄λ₯Ό μ¬μ©ν μ μλ μ¬μ¬μ©μ± λλ¬Έμ΄λ€. νμ§λ§, μ¬μ¬μ©μ±μ΄ νμμλ κ²½μ°μλ μ΅λͺ μμ κ°μ²΄λ₯Ό μμ±ν΄μ μ¬μ©νλ κ²μ΄ ν¨κ³Όμ μ΄λ€.
μ΅λͺ κ°μ²΄λ μΌλ° ν΄λμ€μ λ¬λ¦¬ μμ±μλ₯Ό μμ±ν μ μλ€.
Parent parent = new Parent(Parameter variable){
// νλ λ©μλ μ μΈ
};
//Parent.java
public class Parent {
public void parentMethod() {
...
}
}
// μ΅λͺ
κ°μ²΄ μμ νλ, λ©μλ μ μΈ κ°λ₯ & Parent λ΄λΆ Override λ©μλ μ μΈ κ°λ₯
// field
Parent parent = new Parent() {
int childField;
void childMethod() {};
@Override
public void parentMethod() {
...
}
};
//method
public void childMethod1() {
Parent parent = new Parent() {
int childField;
void childMethod() {};
@Override
public void parentMethod() {
}
};
}
// Parameter Variable
public void childMethod2(Parent parent) {}
public void childMethod3() {
childMethod2(new _426Parent() {
int childField;
void childMethod() {};
@Override
public void parentMethod() {
}
});
}
μ΅λͺ μμ κ°μ²΄μ μλ‘κ² μ μλ νλμ λ©μλλ μ΅λͺ μμ κ°μ²΄ λ΄λΆμμλ§ μ¬μ© κ°λ₯νλ€. μΈλΆμμλ μ κ·Όμ΄ λΆκ°λ₯νλ€.
Parent parent = new Parent() {
int childField;
void childMethod() {}
@Override
public void parentMethod() {
}
};
void method() {
// μλ‘κ² μμ±λ νλμ λ©μλλ μΈλΆμμ νΈμΆ λΆκ°
// parent.childField;
// parent.childMethod;
parent.parentMethod();
}
2. μ΅λͺ ꡬν κ°μ²΄ μμ± (Interface)
: μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€κ° μ¬μ¬μ©μ±μ΄ νμ μκ² λλ©΄, μ΅λͺ ꡬν κ°μ²΄λ₯Ό μμ±ν΄μ μ¬μ©νλκ² μ’μ λ°©λ²μ΄λ€.
μΈν°νμ΄μ€λ₯Ό ν΅ν΄ ν΄λμ€λ₯Ό μ μΈνκ² λλ©΄, λͺ¨λ μΆμ λ©μλλ₯Ό μ€μ²΄ λ©μλλ‘ μ¬μ μ ν΄μΌνλ€. κ·Έλ μ§ μμΌλ©΄ μ»΄νμΌ μλ¬κ° λ°μνκ² λλ€.
//parent interface
public interface Parent{
public void method1();
public void method2();
}
Parent parent = new Parent() {
@Override
public void parentMethod1() {
}
@Override
public void parentMethod2() {
}
};
void method1() {
Parent parent = new Parent() {
@Override
public void parentMethod1() {
}
@Override
public void parentMethod2() {
}
};
}
void method2(Parent parent) {}
void method3() {
method2(new Parent() {
@Override
public void parentMethod1() {
}
@Override
public void parentMethod2() {
}
});
}
# μ€μ²© μΈν°νμ΄μ€
// button.java & Listner interface [μ€μ²©]
public class Button {
Listner listner;
void setListner(Listner listner) {
this.listner = listner;
}
void onTouch() {
listner.onClick();
}
public interface Listner{
void onClick();
}
}
//window, main μμ μμ±νλ κ°μ²΄
public class Window {
Button button1 = new Button();
Button button2 = new Button();
Button.Listner listner = new Button.Listner() {
@Override
public void onClick() {
System.out.println("ν΄λ¦ν©λλ€.");
}
};
public _Window() {
button1.setListner(listner);
button2.setListner(new _433Button.Listner() {
@Override
public void onClick() {
System.out.println("ν΄λ¦ν©λλ€. λ€λ₯Έ λ²μ ");
}
});
}
}
// main class
public static void main(String args[]){
Window window = new Window();
window.button1.onTouch();
window.button2.onTouch();
}
[μΆμ²] νΌκ³΅μλ° p.424~441