【发布时间】:2013-05-25 14:11:09
【问题描述】:
根据文档的第二个表格 (http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html),没有标识符的成员对子类不可见。
但是,当我运行以下示例代码时,会打印“1”(b 的内容)!
class Class1{
private int a=0;
int b=1;
protected int c=2;
public int d=3;
}
class Class2 extends Class1{ }
public class HelloWorld{
public static void main(String []args){
Class2 klass=new Class2();
System.out.println(klass.b);
}
}
如果一个没有访问修饰符的成员不能从子类访问,为什么在这个例子中打印它?
它应该抛出一个错误,就像在私有访问修饰符中一样,不是吗?
【问题讨论】:
-
不,默认访问修饰符可从同一包中的子类访问
-
没有标识符的成员对子类不可见。续->“如果不在同一个包内”,如果在同一个包内或在同一个声明文件中,则表示相同情况,可以访问。
-
Here 是表格的一个版本,稍微清晰一些。
标签: java access-modifiers