javaoopinner-classesambiguityouter-classes

Name ambiguity between outer and inner class methods


Suppose I have:

public class OuterClass() {

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

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

How do I resolve the ambiguity between the someMethod() of the outer class and the someMethod() of the inner class?


Solution

  • You can refer to the outer with OuterClass.this, or call the method with OuterClass.this.method().

    However, as a point of design, sharing the name is confusing, to say the least. It might be reasonable if the inner class represented an extension or, say, a concrete implementation of an abstract method, but that would be clearer by calling super.method. Calling a super method directly, (as it looks like you're intending to do?), is confusing.