码迷,mamicode.com
首页 > 编程语言 > 详细

java访问权限的问题

时间:2017-01-13 10:24:25      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:splay   void   ring   ica   extends   位置   str   tags   错误   

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的。

解决

  1. 其实报的错误就说了问题的原因,Inner()所在的包为pac1.Parent.Inner,修饰符为protected,因此说Inner()可以在pac1.Parent.Inner中访问protected,也就是同包才能访问。说明多思考报的错误也是很重要的。

  2. 知道原因了,只需要将Inner构造函数改为publi就可以了。

java访问权限的问题

标签:splay   void   ring   ica   extends   位置   str   tags   错误   

原文地址:http://www.cnblogs.com/yufu132/p/6281511.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!