一、问题
今天再使用Object类的clone方法发现一个问题,所有的类都继承自Object,Object中有的非private方法他的子类也应该有。在Object中有protected native Object clone() throws CloneNotSupportedException方法,该方法作用是浅clone一个对象。我自己创建了一个实现类public class Demo implements Cloneable,发现不能调用clone方法。
二、误区
访问权限 | 含义 | 本类 | 本包的类 | 非本包子类 | 非本包非子类 |
---|---|---|---|---|---|
public | 公共的 | 是 | 是 | 是 | 是 |
protected | 保护访问权限 | 是 | 是 | 是 | 否 |
default | 包访问权限 | 是 | 是 | 否 | 否 |
private | 私有的 | 是 | 否 | 否 | 否 |
由于有其他语言的基础,对于访问权限关键字一直参考这张表,也受限于这张表,所以会出现这种问题。
三、案例
sdn上也看了一些答案,自己也做了一些小demo.
public class Demo{
protected void demo(){
System.out.println("i am demo");
}
}
public class Demo2 extends Demo{
}
public class App {
public static void main(String[] args) throws IOException, CloneNotSupportedException {
Demo2 demo2 = new Demo2();
demo2.demo();
}
}
四、总结:
protect关键词修饰的方法,其子类可以调用,但是子类的实现类不能直接使用!