equals
Structural, and only within one subtype: discriminating on javaClass rather than on the seven fields alone is what keeps a Link from equalling an Article at the same coordinates, since all three carry an identical field set.
The coordinates go through compareTo, which is what a data class emits for a Double. == would be IEEE instead: there -0.0 == 0.0 holds while the two hash differently, so a pair of equal enrichments could disagree on hashCode and go missing from a HashSet.