어렵고 이해안되는 것들을 내가 이해할 수 있는 느낌으로 풀어써본다.
익명 객체는 이름이 없는 객체이다.
익명 객체는 한번쓰고 버리는 등 이후에 사용하지 않아 자식 클래스를 굳이 선언하지 않으려 한다. 즉, 클래스의 장점인 재사용성을 포기하는 거 같다.
책에서는
class 자식클래스1 extends 부모클래스 { ... }
부모클래스 변수별칭 = new 자식클래스1();
부모클래스 변수 = new 부모클래스() { ... } ;
이렇다는데 솔직히 글자량 달라진거 말고는 이해가 안됐다.
좀 더보고 한번에 이해가게 풀이하자면
오히려 챕터이름이 "익명 객체" 라서 더 헷갈린 거 같다.
"익명 클래스를 내부에서 선언하는 이름을 가진 객체" 가 내가 이해하기엔 더 쉬운거 같다.
부모클래스 [변수1 | 필드1] = new 부모클래스() { ... } ;
를 보면 뒤에 { ... };
를 제외하면 일반적으로 부모클래스로 객체하나 만드는 것과 동일하다.
여기서 extends를 통해서 새롭게 자식클래스를 만드는 대신 이 자식클래스에 적을 내용들을 { ... }
에 적어준다.
일단, 내가 느껴지는 바로는 자식클래스의 이름은 안적으니 익명이지만 "변수1" 또는 "필드1"이라는 이름을 가지고 있으니까 객체가 익명? 인지 모르겠다.
1. 익명 자식 객체
부모클래스 [변수 | 필드] = new 부모클래스(매개값, ...) {
// "자식클래스"처럼 부모클래스에 얹혀 추가적으로 사용할 필드
// "자식클래스"처럼 부모클래스에 얹혀 추가적으로 사용할 매소드
}; // ; 필수!
-----------------
2. 익명 구현 객체
인터페이스 [변수 | 필드] = new 인터페이스() {
// 인터페이스에 선언된 추상 메소드의 실체 메소드 선언(재정의)
// 필드
// 메소드
}; // ; 필수!