package education.innerClass;
public class Person {
void wake() {
System.out.println("7시에 일어납니다.");
}
}
package education.innerClass;
public class Anonymous {
Person field = new Person() {
void work() {
System.out.println("출근합니다.");
}
@Override
void wake() {
System.out.println("6시에 일어납니다.");
work();
}
}; //필드 선언문이라 ; 이 와야함.
void method1() {
Person localVar = new Person() {
void work() {
System.out.println("산책합니다.");
}
@Override
void wake() {
System.out.println("7시에 일어납니다.");
work();
}
};
// Person field = new xxx extends Person() {
//
// }; 원래의 형태, 하지만 이름을 지정해주지 않아서
// 익명 클래스라 부른다.
localVar.wake();
}
void method2(Person person) {
person.wake();
}
}
package education.innerClass;
public class Anonymous_Main {
public static void main(String[] args) {
Anonymous anony = new Anonymous();
anony.field.wake();
// anony.field.work();
// 부모 클래스에 있지 않아 사용불가
// 부모 멤버만 접근 가능
System.out.println("-----------");
anony.method1();
System.out.println("-----------");
anony.method2(
new Person() {
void study() {
System.out.println("공부합니다.");
}
@Override
void wake() {
System.out.println("8시에 일어납니다.");
study();
}
}
);
}
}
그런 과정들이 귀찮을 때 쓴다.
댓글