abstract class IntSList { // toStringHelp: return a string version of the list // which contains no parens, just comma-separated items: // abstract protected String toStringHelp(); public String toString() { return "(" + toStringHelp() + ")"; } // main is a great place to put test cases: // public static void main( String[] args ) { IntSList l0, l1, l2, l3; l0 = new Empty(); l1 = new Cons( 99, l0 ); l2 = new Cons( 5, new Cons ( 6, new Empty() )); l3 = new Cons( 4, l2 ); System.out.println( "l0 is " + l0.toString() ); System.out.println( "l1 is " + l1.toString() ); System.out.println( "l2 is " + l2.toString() ); System.out.println( "l3 is " + l3.toString() ); } } // ------------ Empty -------------- // class Empty extends IntSList { Empty() {} protected String toStringHelp() { return ""; } } // ------------ Cons --------------- // class Cons extends IntSList { int first; IntSList rest; Cons( int car, IntSList cdr ) { first = car; rest = cdr; } protected String toStringHelp() { return " " + first + rest.toStringHelp(); } }