class AClone {
}
public class TestClone { public static void main(String[] args){
TestClone tc = new TestClone();
try {
tc.clone(); //为什么此处可以clone........
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
AClone ac = new AClone();
ac.clone();//为什么此处不可以clone呢?哪个解释一下
}
}
}
public class TestClone { public static void main(String[] args){
TestClone tc = new TestClone();
try {
tc.clone(); //为什么此处可以clone........
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
AClone ac = new AClone();
ac.clone();//为什么此处不可以clone呢?哪个解释一下
}
}
如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException 异常。
按照惯例,实现此接口的类应该使用公共方法重写 Object.clone(它是受保护的)。
Object类中的clone方法是protected的,
那类AClone和类TestClone都应该继承了此方法,都可以在建创这个对象的时候访问到此方法:
如:
TestClone类创建一个对象时,句柄tc可以调用clone方法(只须捕获异常即可编译通过)
而AClone类创建一个对象时,则提示clone方法不可见(似乎又成了访问控制的问题)。
为什么同样的代码会有区别呢?
class AClass implements Cloneable {
protected void fun() {// 此方法访问控制权限和clone一致的 }
}class AClone extends AClass implements Cloneable {}public class TestClone implements Cloneable { public static void main(String[] args) {
TestClone tc = new TestClone();
AClone ac = new AClone();
ac.fun(); // 说明protected方法还是继承过来了,为什么clone方法没有继承过来呢
try {
tc.clone(); // 此处编译没有问题,为什么此处可以clone........
ac.clone(); // 此处编译有问题,为什么此处不可以clone呢?哪个解释一下
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
protected 的方法可以在同一个包或者在其子类中可以访问!
AClone ac = new AClone();
ac.clone();//为什么此处不可以clone呢?哪个解释一下
你这里不在同一个包,也没有在其子类中。建议看看的Java的权限修饰符
只能在类自己或者子类中调用......