猿问

为什么不可以直接通过子类的对象cl.clone()来调用clone()方法呢?why?

class cloneClass implements Cloneable{
int x=0;
int y=9;
protected void protectedMethod()
{
System.out.println("calling ProtectedMethod");
}
Object getObj() throws CloneNotSupportedException
{
return clone();
}
}
class extendProtectedClass extends cloneClass{

}
public class Test{
public static void main(String [] args){
cloneClass cl=new cloneClass();
try{
cloneClass cl2=(cloneClass)cl.clone();//通过cl.clone()条用Object.clone()方法出错
System.out.println(cl2.x);
}catch(CloneNotSupportedException ex){
ex.printStackTrace();
}
/*extendProtectedClass ep=new extendProtectedClass();
ep.protectedMethod(); //可以通过子类的对象直接调用父类的保护方法protectedMethod()
*/
}
}
问题:为什么不可以直接通过子类的对象cl.clone()来调用clone()方法而要通过子类的方法来简介调用
我写的Object.clone()是为了说Object类的clone()方法,不是说通过Object类名来调用clone()方法。实际上我是用对象cl.clone()调用

眼眸繁星
浏览 188回答 2
2回答

MYYA

protected Object clone() ;Object类中定义的clone()方法声明为protected,只能被同一包下的类及子类调用,通过cloneClass.clone()调用因为没有可见的clone()方法,会提示no such method.你要通过(cloneClass)cl.clone()调用的话,在cloneClass内中声明Object clone() {}重载clone()方法,去掉protected声明

慕码人2483693

Object类中没有静态方法clone(),当然不能这样调用。
随时随地看视频慕课网APP
我要回答