this.new XXX()를 쓰는 이유가 뭘까?
Foo.java
package innerclass;
public class Foo {
class Bar{
void say(){
System.out.println("Foo-Bar");
}
}
public void test(){
new Bar().say();
}
public static void main(String[] args) {
new Foo().test();
}
}
Bar.java
package innerclass;
public class Bar {
void say(){
System.out.println("Bar");
}
}
흠.. 저 상황에서 java Foo 를 실행하면 어떤 결과가 출력될까요? SCJP 문제 같네요.ㅋㅋ 답은 Foo-Bar 입니다. 자기 내부에 있는 클래스랑 같은 이름의 클래스가 같은 패키지 안에 있을 경우. 내부 클래스가 우선시 됩니다.
만약에 Foo.java 클래스가 덩치가 좀 커서 inner class인 Bar 클래스가 잘 안 보인다면, 밖에 있는 Bar 클래스의 객체라고 착각할 수도 있겠죠?
그래서 inner class의 객체를 만들 떄는 반드시 this.을 앞에 붙여주는게 좋겠습니다.
public static void main(String[] args) {
this.new Foo().test();
}
this.new Foo().test();
}
요렇게 말이죠.