As every class in Java extends from Object, so it should have clone
method but still we are forced to override clone
No you are not forced to override the clone
method. In inheritance, when you inherit a class, you are not forced to override it's method. Its modifier being public or protected doesn't make much of a difference. However, if you want to invoke a method directly on super
class reference, then that method has to be public
. Protected methods are accessible only through inheritance. That is you can only access them through subclass
reference. Or if you override the method, you can access them through super
keyword.
Having said that, you should not override clone
method, as it is broken
. Because, for a class to be cloned, you need to implement the Cloneable
interface. And then your class uses the clone
method of Object
class instead. Because, Cloneable
interface doesn't exactly have any method for cloning
. It would be a better option to use Copy Constructor
instead.
public class A {
private int data;
public A() {
}
public A(A a) {
this.data = a.data;
}
}
For more details, I would suggest to go through this chapter of Joshua Bloch's
Effective Java, which covers all aspects of using clone
method.
Effective Java- Item # 11 - Override clone judiciously