/*  Nested classes can access all members of all levels of the classes they are nested within   */

public class MultiNestedAccess {
  public static void main(String[] args) {
    ABC obj = new ABC();
    ABC.X ABCXObj = obj.new X();
    ABC.X.Y ABCYObj = ABCXObj.new Y();
    ABCYObj.h();
  }
} 


class ABC {   //  Outer-most class
  private void f() {
    System.out.println("ABC class method f()");
  }

  class X {   // Inner class of ABC outer class
    private void g() {
      System.out.println("ABC.X class method g()");
    }

    public class Y {  // Inner-most class
      void h() {
        f();    // Inner OR Inner-most classes can directly access outer OR outer-most class members
        g();    // Inner OR Inner-most classes can directly access outer OR outer-most class members
        System.out.println("ABC.X.Y class method h()");
      }
    }
  }
}
