JavaBookStudy / JavaBook

책읽기 스터디
https://javabookstudy.github.io/
Apache License 2.0
19 stars 2 forks source link

[Effective Java] Item 24. 익명 클래스를 사용하는 클라이언트는 그 익명 클래스가 상위 타입에서 상속한 멤버 외에는 호출할 수 없다? #13

Closed taxol1203 closed 3 years ago

taxol1203 commented 3 years ago

제목이 곧 내용입니다. 상위 타입에서 상속한 멤버 외에 사용하는 경우가 어떤게 있을까요? 익명클래스의 바깥클래스의 멤버 외에 다른 클래스의 인스턴스를 사용할 수 없다는 뜻일까요?? 148p. 아래에서 7번째 줄입니다.

daebalprime commented 3 years ago

익명 클래스는 어떤 클래스나 인터페이스를 상속받아 구현하게 되는데, 이 때 익명 클래스 고유의 필드나 메서드를 호출하거나 사용하지 못한다는 의미입니다. 이는 어찌보면 당연한게, 해당 익명 클래스의 인스턴스를 가르키고 있는 reference variable의 type은 익명 클래스가 상속한 class이기 때문입니다. 상위 타입에서 상속한 멤버 외에 사용하는 경우라면, Person()을 상속한 Student()라는 클래스의 doStudy() 등을 호출하는 경우를 이르는 것 같습니다.

Source : https://yookeun.github.io/java/2017/01/24/java-anonymousclass/

jth2747 commented 3 years ago

처음에는 "익명 클래스를 사용하는 클라이언트에서는 익명 클래스로 객체를 생성하면 그 익명 클래스가 상위 타입에서 상속한 멤버 외에는 호출해서 사용할 수 없다는 것 같다" 라고 잘못 이해를 하였는데, 대연님이 올려주신 글을 쭉 읽어봤는데 Person p = new Person() { String name = "Kim"; public void callMe() { System.out.println("Call callMe method"); } @Override void whoAmI() { System.out.println("나는 " + name + " 이다."); } }; //p.callMe(); //실행되지 않는다. 에러. p.whoAmI();

이 부분을 보니 이해가 되었습니다. 올려주신 질문에 대답이 가능한 부분이라고 생각합니다.