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关键字有关?

解决方案 »

  1.   

    十分感谢两位解答。已经明白,原来是这样:
        主要是protected的问题我没有搞清楚,Java中的受保护机制与其他语言比如c++中的不同,Java中受保护部分对所有子类及同一个包中的所有其他类都可见,尤其注意后面的那个,这是与其他语言的区别,实际上这样会使安全性变差(核心技术2上这样讲)
    既“不同包不可见,不可见不继承”-这就是用Object类对象和String类对象不能使用clone()方法方法的原因,此时这俩个对象就好比和你的程序不在同一个包中。
       再有就是Clone方法。Clone方法被声明成Protected,不改访问限制,可以,但子类只能调用clone克隆自己,不能出包(这样就相对无意义了,要使用克隆只好将其public),即:Protected方法的对象只有同包内对象可调用,不管是不是子类,都可以调用。而如果是子类的话,即使不同包也会直接继承这个方法。这就看出Protected的微妙了
    再次感谢