java访问权限的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java访问权限的问题相关的知识,希望对你有一定的参考价值。
java访问权限的问题
背景:
关于java中的四种访问修饰符,public ,default ,protected ,private的作用范围本以为很熟悉了,但碰到了这样一段代码:
package pac1;
public class Parent {
protected int i;
protected class Inner{
}
}
package pac2;
import pac1.Parent;
public class Child extends Parent {
public static void main(String args[]){
new Child().i=0;
Inner i = new Parent().new Inner();
}
}
问题
代码的意思是,父类与子类不在一个包,父类中有protected的内部类,现在想在子类中生成父类中内部类对象。但是发现报这错误:
Error:(8, 28) java: Inner()可以在pac1.Parent.Inner中访问protected
思考
protected的访问权限是这说的,同一个包下是可以随意访问的,其他包下只有之类可以访问。的确Inner i = new Parent().new Inner();
左边是没有问题的,但是右边是内部类生成方法,为什么不能访呢?
原来我在这里只考虑了Parent和Child的包位置和继承关系,而没有考虑内部类和Child也是不同包,而Inner的构造函数访问权限不为public,因此在不同包又没有继关系的Child是不能生成Inner的。
解决
其实报的错误就说了问题的原因,Inner()所在的包为pac1.Parent.Inner,修饰符为protected,因此说Inner()可以在pac1.Parent.Inner中访问protected,也就是同包才能访问。说明多思考报的错误也是很重要的。
知道原因了,只需要将Inner构造函数改为publi就可以了。
以上是关于java访问权限的问题的主要内容,如果未能解决你的问题,请参考以下文章
Java访问权限控制中,友好变量或方法能在类内部、本包中使用,不能在子类及包外使用,但请看下面代码:
Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段