Clone should return the same class of the defining class and do not declare to throw CloneNotSUpportedException. They should also not call not-final methods.