title: Overriding abstract method or using one single method in enums?
body: <p>Consider the below <code>enums</code>, which is better? Both of them can be used exactly the same way, but <em>what are their advantages over each other</em>?</p>
  
  <p><strong>1. Overriding abstract method:</strong></p>
  
  <pre><code>public enum Direction {
      UP {
          @Override
          public Direction getOppposite() {
              return DOWN;
          }
          @Override
          public Direction getRotateClockwise() {
              return RIGHT;
          }
          @Override
          public Direction getRotateAnticlockwise() {
              return LEFT;
          }
      },
      /* DOWN, LEFT and RIGHT skipped */
      ;
      public abstract Direction getOppposite();
      public abstract Direction getRotateClockwise();
      public abstract Direction getRotateAnticlockwise();
  }
  </code></pre>
  
  <p><strong>2. Using a single method:</strong></p>
  
  <pre><code>public enum Orientation {
      UP, DOWN, LEFT, RIGHT;
      public Orientation getOppposite() {
          switch (this) {
          case UP:
              return DOWN;
          case DOWN:
              return UP;
          case LEFT:
              return RIGHT;
          case RIGHT:
              return LEFT;
          default:
              return null;
          }
      }
      /* getRotateClockwise and getRotateAnticlockwise skipped */
  }
  </code></pre>
  
  <hr>
  
  <p><strong>Edit:</strong> I really hope to see some well reasoned/elaborated answers, with evidences/sources to particular claims. Most existing answers regarding performance isn't really convincing due to the lack of proves.</p>
  
  <p>You <em>can</em> suggest alternatives, but it have to be clear how it's better than the ones stated and/or how the stated ones is worse, and provide evidences when needed.</p>