看java的克隆时遇到问题 不能直接调用Object类的clone()方法,感觉很纳闷,提示方法不可见
有查看了一下protected访问权限
1同类 2同包 3 子类(不同包)
明明子类也是可以的。一般的类都是默认继承object的,所以应该可以调用clone()方法
第一、2条都好理解
第3条子类中:应该具体解释为子类可以调用自己从父类中继承的父类的protected方法。但是还是不能调用父类自己的
protected的方法,这里的父类是指父类实例。因为这样的话违反了第2条同包的原则。
举个至简例子:
有查看了一下protected访问权限
1同类 2同包 3 子类(不同包)
明明子类也是可以的。一般的类都是默认继承object的,所以应该可以调用clone()方法
第一、2条都好理解
第3条子类中:应该具体解释为子类可以调用自己从父类中继承的父类的protected方法。但是还是不能调用父类自己的
protected的方法,这里的父类是指父类实例。因为这样的话违反了第2条同包的原则。
举个至简例子:
public class A extends Object{
public static void main(String[] args) {
A a = new A();
try {
/*
* protected方法(clone())从object继承而来,
* 这里是子类A自己已经用有clone()方法,所以可以调用
*/
a.clone();
} catch (Exception e) {
e.printStackTrace();
}
Object o = new Object();
/*
* 这里的o是父类Object的实例,调用clone()会有编译错误,
* 虽然是在自己的子类中但是实例还是父类,他的调用权限最大还是在自己的包中,
* 即lang包
*/
o.clone();//The method clone() from the type Object is not visible
}
}