public class TestClone {
public static void main(String[] args) throws Exception {
TestClone tc = new TestClone();
Object t = tc.clone();
Object o = new Object();
Object oo = o.clone();
String s = new String();
Object os = s.clone();
}
}class SubTestClone extends TestClone {
public static void main(String[] args) throws Exception{
SubTestClone stc = new SubTestClone();
Object o = stc.clone();
TestClone tc = new TestClone();
Object oo = tc.clone();
}
}
//直接用Object类对象不能使用clone()方法
//用String对象不能使用clone()方法// 子类SubTestClone中创建其父类对象TestClone,
//不能调用父类对象的clone()方法
// 但直接创建子类对象却又有了clone()方法了想问下:
//1,protected 的实际意义?
//是为了方便子类(孙类)调用吗?
//那object.clone();怎么回事?String类怎么不能调用?
//新建任意类却能调用?
//但在任意类中,怎么孙类中不能调用父类的clone()方法;?
//2,如果不重写Clone(),Object中Clone()方法的意义?
//3.是不是和native关键字有关?
主要是protected的问题我没有搞清楚,Java中的受保护机制与其他语言比如c++中的不同,Java中受保护部分对所有子类及同一个包中的所有其他类都可见,尤其注意后面的那个,这是与其他语言的区别,实际上这样会使安全性变差(核心技术2上这样讲)
既“不同包不可见,不可见不继承”-这就是用Object类对象和String类对象不能使用clone()方法方法的原因,此时这俩个对象就好比和你的程序不在同一个包中。
再有就是Clone方法。Clone方法被声明成Protected,不改访问限制,可以,但子类只能调用clone克隆自己,不能出包(这样就相对无意义了,要使用克隆只好将其public),即:Protected方法的对象只有同包内对象可调用,不管是不是子类,都可以调用。而如果是子类的话,即使不同包也会直接继承这个方法。这就看出Protected的微妙了
再次感谢