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);
   }
}