/**
   * All objects returned from here from {@code this} should contribute to determining an object's hash code and equality.
   * A suggestion for handling circular references back to {@code this} should be handled by way of a unique identifier
   * in the other's {@link #significantAttributes()} instead of the object itself.
   * @return An array of all the {@link Object} important for hashCode/equality.
   */
protected abstract Object[] significantAttributes();
protected abstract Object[] significantAttributes();
protected abstract Object[] significantAttributes();
protected abstract Object[] significantAttributes();