object可以用什么标签代替

object可以用什么标签代替

第1个回答  2011-02-23
TTI(run-time type identification)的机制,动态得找到目前正在调用clone方法的那个reference,根据它的大小申请内存空间,然后进行bitwise的复制,将该对象的内存空间完全复制到新的空间中去,从而达到shallowcopy的目的。
所以你调用super.clone() 得到的是当前调用类的副本,而不是父类的副本。
2.这句话是J2SE API帮助里面的话,意思是要让实例调用clone方法就需要让此类实现Cloneable接口,API里面还有句话是:如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException 异常,这便是“合法”的含义。 但请注意,Cloneable接口只是个标签接口,不含任何需要实现的方法,就像Serializable接口一样。

3. Object.clone()? 不能这么调用的。

回答还满意么。

/*------------------以下是对问题的补充---悲哀的注释------------*/

ok 请容我慢慢道来
你看到clone()是Object的方法,而Object是所有类的父类,就认为可以用Object调用 clone是么?
但不能使用Object调用clone()方法
原因如下:
1.从你写法本身来看,Object.clone()肯定不行,因为Object是类, 而clone()是成员方法,所以不能用Object.clone();
2.那么是不是可以先Object obj=new Object();再obj.clone();或者Object.class.newInstance().clone()呢?还是不行。
clone()对Object类对象本身是不可见的。所以你会发现找不到clone()方法
原因是:clone()方法是protected访问权限
方法原型:protected native java.lang.Object clone() throws java.lang.CloneNotSupportedException
而protected权限的含义是:只对同一包中的类和不同包中的子类及间接子类可访问,换句话说就是不同包中的非子类或间接子类不能访问,包含了默认的包访问权限。
这个地方容易混淆哦
你可能会问任何类都是Object的子类为什么不能访问呢,对,任何类是他的子类也继承了clone()方法
但请注意,你那句代码clone()的调用者是谁?是Object本身,即Object对象,正如我们所说,“不同包中的非子类或间接子类不能访问”,这里面也包括了父类本身,你调用者是父类,在不同包中,protected成员对父类不可见哦,所以根本不能用object对象调用clone()

综上,因为在不同包中父类本身不能调用,也找不到protected方法 ,故无法在代码中使用object直接调用clone()方法,

有点难理解,关键在对protected的理解上,因为protected除了本身在继承上的访问权限外,还包含了包访问权限,希望回答你还满意。
相似回答