In support of my earlier claim that Java enums are subclassable, here is an example inspired by McGraw-Hill’s SCJP 6 study guide:
public enum CoffeeSize { REGULAR(4), BIG(8), HUGE(12), OVERWHELMING(16) { public void drink() { super.drink(); System.out.println("barf"); } }; private int oz; CoffeeSize(int oz) { this.oz = oz; } public void drink() { for (int n = 0; n < oz; ++n) System.out.println("glug"); } public static void main(String[] args) { CoffeeSize.OVERWHELMING.drink(); } }
I have not yet read Joshua Bloch’s Effective Java (2nd Edition), but I attended his talk at JavaOne last year. There are some nifty enum examples there.