2009-09-25 3 views
6

한다고 가정 내가 가진 :자바 : 외부 및 내부 클래스 메소드 간의 이름 모호성

public class OuterClass() { 

    public class InnerClass { 
    public void someMethod(int x) { 
     someMethod(x); 
    } 
    } 

    public void someMethod(int x) { 
    System.out.println(x); 
    } 
} 

어떻게 외부 클래스의 someMethod() 및 내부 클래스의 someMethod() 사이의 모호성을 해결하는 방법은 무엇입니까?

답변

13

OuterClass.this으로 바깥 쪽을 참조하거나 OuterClass.this.method()과 함께 메서드를 호출 할 수 있습니다.

그러나 디자인의 요점으로, 이름을 공유하는 것은 혼란 스럽습니다. 내부 클래스가 확장을 표현하거나, 추상 메소드의 구체적인 구현을 나타내지 만 super.method를 호출하면 내부 클래스가 더 명확해질 수 있습니다. 수퍼 메소드를 직접 호출하면 (마치 의도 한 것처럼 보이지만) 혼란 스럽습니다. OuterClass.this.someMethod()와 외부 클래스에

+0

+1 "이 방법으로 이름을 지정할 필요가 없습니다." –

6

범위는 :

public class OuterClass { 

    public class InnerClass { 

    public void someMethod(int x) { 
     OuterClass.this.someMethod(x); 
    } 
    } 

    public void someMethod(int x) { 
    System.out.println(x); 
    } 
} 
+0

Aw ... Steve B.는 저의 앞에 똑같은 대답을 올렸습니다. 나는 예제 코드를 위해 여기에서 내 것을 떠날 것이다. – SingleShot

1

모호함의 이름을 변경하면 좋습니다. 특히 상향 및 후방 아키텍처에 적용하면 더욱 그렇습니다.

+1

클래스가 인터페이스를 구현하는 경우에는 작동하지 않습니다. –

관련 문제