public class RussianDoll { // version 3 private RussianDoll inner; private RussianDoll(RussianDoll rd) { // let's make this private now inner = rd; } /* What's wrong with this? * public static final RussianDoll ZERO = new RussianDoll(); */ public static final RussianDoll ZERO = new RussianDoll(null); public RussianDoll smaller() { return inner; // but what is ZERO.smaller() now? } public RussianDoll bigger() { return new RussianDoll(this); } public String toString() { // recursive: will it necessarily terminate? if (this == ZERO) return "0"; else return "S" + inner.toString(); // "S" for "surround" } public static void main(String args[]) { System.out.println(ZERO.bigger().bigger().bigger().smaller().bigger()); } }