6

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?

Roman C
  • 49,761
  • 33
  • 66
  • 176
Jake
  • 15,007
  • 22
  • 70
  • 86

3 Answers3

13

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.

Steve B.
  • 55,454
  • 12
  • 93
  • 132
6

Scope it to the outer class with OuterClass.this.someMethod():

public class OuterClass {

  public class InnerClass {

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

  public void someMethod(int x) {
    System.out.println(x);
  }
}
SingleShot
  • 18,821
  • 13
  • 71
  • 101
1

Renaming ambiguity is a good practice. Especially if you apply it in the upward and backward architecture.

Roman C
  • 49,761
  • 33
  • 66
  • 176