// decompiled version of BreedM so that you can see how it
// works under the hood.

package com.mindprod.example;

// Note the final. You cannot extend enum.
// This won't compile since the compiler won't let you
// extend the Enum class manually.
public final class BreedM extends Enum

   // Compiler automatically generates a values method
   // using the genenated $VALUES list of all possible enums
   public static final BreedM[] values()

   // Compiler automatically generates a valueOf method
   // If there is no match for the String, valueOf will throw an
   // IllegalArgumentException.
   public static BreedM valueOf(String s)
      return(BreedM)Enum.valueOf(com.mindprod.example.BreedM, s);

   // This method common to all enum constants is just a garden-variety
   // instance method.
   public String getColours()
      return colours;

   * constructor with two hidden parameters and one explicit one
   * the colours.
   private BreedM(String s, int i, String s1)
      super(s, i);
      colours = s1;

   // Named references to each of the enum constant objects.
   // Note how they are all public even though we did not
   // explicitly declare them so.
   public static final BreedM DACHSHUND;
   public static final BreedM DALMATIAN;
   public static final BreedM LABRADOR;

   // field common to all enum constants is just an ordinary
   // instance field.
   private String colours;

   // Compiler automatically generates a list of all
   // possible enum constants.
   private static final BreedM $VALUES[];

      // initialilsation with constructors with two hidden pararmeters
      // and our explicit one.
      DACHSHUND = new BreedM("DACHSHUND", 0, "brown");
      DALMATIAN = new BreedM("DALMATIAN", 1, "spotted");
      LABRADOR = new BreedM("LABRADOR", 2, "black or tan");

      // construct the $VALUES array
      $VALUES = (new BreedM[] {