所谓的权限其实是方法的调用者和方法的提供者之间的关系。
我们知道clone方法是Object对象中的protected权限的方法,该方法在同包,同类,子类中都可以使用。显然A类是Object类的子类。那么,看如下的代码,会报错吗?
public class Test {
public static void main(String[] args) {
A a = new A();
a.clone();
}
}
class A {}
// protected native Object clone() throws CloneNotSupportedException;
实际上会报错! ,但是为什么会报错呢?
因为调用clone()方法的,并不是a对象!
方法的调用者与方法的提供者
在Java中,’.’ 符号表示的只是从属关系,比如下面这段代码中,并不是a修改了age属性,而是Test类在它的main方法中修改了a对象的age属性。
public class Test {
public static void main(String[] args) {
A a = new A();
a.age = 1;
}
}
class A {
public int age = 0;
}
再看第一段代码: 实际上,调用clone方法的是Test类,而这个clone方法是从属于A类的,因此方法的调用者和方法的提供者并不存在父子关系。因此会报错。
public class Test {
public static void main(String[] args) {
A a = new A();
// 方法的调用者 : Test类
// 方法的提供者 : a对象
a.clone();
}
}
class A {}
// protected native Object clone() throws CloneNotSupportedException;
看图更清晰: