A clone()
method should call super.clone()
to obtain the new object.
All implementations of clone()
should obtain the new object by calling super.clone()
. If a class fails to follow this convention, a subclass's clone()
method will return an object of the wrong type.
Example 1: The following two classes demonstrate a bug introduced by failing to call super.clone()
. Because of the way Kibitzer
implements clone()
, FancyKibitzer
's clone method will return an object of type Kibitzer
instead of FancyKibitzer
.
public class Kibitzer implements Cloneable {
public Object clone() throws CloneNotSupportedException {
Object returnMe = new Kibitzer();
...
}
}
public class FancyKibitzer extends Kibitzer
implements Cloneable {
public Object clone() throws CloneNotSupportedException {
Object returnMe = super.clone();
...
}
}
[1] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 580