2013-04-11 138 views
0

我试过下面的一段程序,我开始知道我们可以访问默认/包级别的实例变量。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访问默认访问变量。

+6

“默认访问变量” - 嗯,你把变量声明为public:'public int i'。 –

+0

如果类本身默认访问那么限制访问? – Bala

回答

2

因为它扩展B的延伸A.

+0

但是一个类只能打包到com.test才可见。 – Bala

+2

没关系。 'B'有一个'public int i'。 –

-1

有4个不同的访问级别:公共,私有,保护和包私有。公共对所有事物都是可见的,甚至包装外面。私人只在课堂内部可见。受保护的对类和所有类都是可见的,并且对其进行扩展。包私有是默认的(当你不指定任何其他包时),并且它对一个包中的所有类都可见,其中变量被初始化

0

B继承A的所有公共成员,而不管A自己的可见性。这就是C为什么看到这个成员的原因。

这当然很混乱。根本问题是公共类扩展了非公共类。也许语言应该禁止这一点。