package packageA; public class ClassA { protected String s; }
如今有另一个包里的类继承java
package packageB; import packageA.ClassA; public class ClassB extends ClassA { public void run(){ System.out.println("run"); ClassA a=new ClassA(); System.out.println(a.s); } }
结果会发现a.s会出错,缘由是无访问权限IDE建议改成publiccode
但是ClassB明明访问了ClassA啊(以前在ClassB中main方法访问出问题还觉得是static方法不能访问...)继承
可当把ClassB移动带ClassA相同的目录下时就能够操做a.s了class
protected其实也是同包能够访问(这点和default一致),另外还有个功能就是能够被之类继承,其实就是至关于之类也有一个protected String s;这一段代码,只是因为继承而省略了,这样能够减小代码量,那么其实之类是在访问本身的变量import
对于方法也是一样的道理,能够参见下面的代码:变量
package packageA; public class ClassA { protected String s; public void print(){ System.out.println(s); } }
package packageB; import packageA.ClassA; public class ClassB extends ClassA { public static void main(String[] args){ ClassB b=new ClassB(); b.print(); b.s="classB"; b.print(); } }
结果为null和classB,其实至关于把class的相关代码拷贝到classB中权限