정적 멤버 클래스 내부에는 바깥 클래스의 인스턴스 필드를 사용할 수 없다
.
로컬 클래스는 생성자와 메소드가 실행될 동안에만 객체를 생성할 수 있기 때문에 정적 클래스로 만들 수 없다.
익명 객체에는 생성자를 선언할 수 없다
.
myCar.new Tire()
new Car.Engine()
public class ActionExample {
public static void main(String[] args) {
Action action = new Action() {
@Override
public void work() {
System.out.println("복사를 합니다."); }
};
action.work();
}
}
public class Anonymous {
Vehicle field = new Vehicle() {
@Override
public void run() {
System.out.println("자전거가 달립니다.");
}
};
void method1() {
Vehicle localVar = new Vehicle() {
@Override
public void run() {
System.out.println("승용차가 달립니다.");
}
};
localVar.run();
}
void method2(Vehicle v) {
v.run();
}
}
public class AnonymousExample {
public static void main(String[] args) {
Anonymous anony = new Anonymous();
anony.field.run();
anony.method1();
anony.method2(
new Vehicle() {
@Override
public void run() {
System.out.println("트럭이 달립니다.");
}
}
);
}
로컬 클래스 내부에서 값을 변경하지 못하도록 제한하기 때문에 로컬 변수를 로컬 클래스에서 사용할 경우 로컬 변수는 final 특성을 갖게 된다.
따라서 nickName 변수를 다음과 같이 chatId로 초기화해야 한다.
String ninckName = chatId;