public final class Body6 { private static long nextID = 0; final long idNum; final String nameFor; private Body6 orbits; // not final (not immutable), so private Body6 (final String n) { this (n, null); } Body6 (final String n, final Body6 o) { this (nextID++, n, o); } private Body6 (final long id, final String n, final Body6 o) { idNum = id; nameFor = n; orbits = o; } public void setOrbits (final Body6 o) { orbits=o; } public Body6 getOrbits () { return orbits; } public String toString () { if (orbits==null) { return String.format ("%s (%d)", nameFor, idNum); } else { // Watch out for infinite recusion! return String.format ("%s (%d) [orbits %s]", nameFor, idNum, orbits.nameFor); } } public static void main (final String[] args) { final Body6 sun = new Body6 ("Sol"); final Body6 earth = new Body6 ("Earth", sun); final Body6 siriusA = new Body6 ("Sirius A"); final Body6 siriusB = new Body6 ("Sirius B", siriusA); siriusA.setOrbits (siriusB); } }