title: Issue in understanding java method
body: <p>maybe I've a serious gap in java fondamental comprehension. In the code below I can't understand how getLength method can calculate walk length. Why recall itself on tail?</p>
  
  <pre><code>class Point {
  
      private int x;
      private int y;
  
      public Point(int x, int y) {
          this.x = x;
          this.y = y;
      }
  
      public static void main(String argv[]) {
  
          Point p1 = new Point(0, 0);
          // Walk w1 = new Right(new Down(new Left(new Up(new Stop()))));
          Move w2 = new Left(new Left(new Up(new Stop())));
          // Walk w3=new Right(new Stop());
          System.out.println(w2.tail);
      }
  }
  
  abstract class Walk {
  
      public abstract boolean isStop();
  
      public abstract int getLength();
  }
  
  class Stop extends Walk {
  
      @Override
      public boolean isStop() {
          return true;
      }
  
      @Override
      public int getLength() {
          return 0;
      }
  }
  
  abstract class Move extends Walk {
  
      Walk tail;
  
  
      @Override
      public int getLength() {
  
          return 1 + tail.getLength();
      }
  
      Move(Walk tail) {
          this.tail = tail;
  
      }
  
      @Override
      public boolean isStop() {
          return true;
      }
  }
  
  class Right extends Move {
  
      public Right(Walk tail) {
  
          super(tail);
  
      }
  }
  
  class Left extends Move {
  
      public Left(Walk tail) {
          super(tail);
      }
  }
  
  class Up extends Move {
  
      public Up(Walk tail) {
          super(tail);
      }
  }
  
  class Down extends Move {
  
      public Down(Walk tail) {
          super(tail);
      }
  }
  </code></pre>