可以在包外部访问Java默认访问说明符吗?

时间:2013-04-11 22:27:30

标签: java

我尝试了一段程序,然后我才知道我们可以访问默认/包级实例变量。

我想了解为什么在java中允许它。

1

package com.test;

class A {
    public int i = 10;
}

2

package com.test;

public class B extends A{
}

3

package com.child;

import com.test.B;

public class C extends B{

    public int getI(){
        return this.i;
    }

    public static void main(String[] args) {
        System.out.println(new C().getI());
    }
}

我能够成功运行此程序。我想要了解的是如何从另一个packkage访问默认访问变量。

3 个答案:

答案 0 :(得分:2)

因为它延伸了B,它延伸了A。

答案 1 :(得分:0)

B继承了A的所有公共成员,无论A自己的可见性如何。这也是C看到会员的原因。

这当然令人困惑。根本问题是公共类扩展了非公共类。也许语言应该禁止。

答案 2 :(得分:-1)

有4种不同的访问级别:public,private,protected和package-private。公众对一切都是可见的,甚至是外包装。私有只在课堂内可见。受保护对于类和所有类都是可见的,这扩展了它。 Package-private是默认的(当你没有指定任何其他的时),并且它对一个包中的所有类都是可见的,其中变量被初始化