0

我尝试了以下程序,我知道我们可以访问默认/包级别的实例变量。

我想了解为什么它在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());
    }
}

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

4

3 回答 3

2

因为它扩展了 B,而 B 又扩展了 A。

于 2013-04-11T22:28:41.103 回答
0

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

这当然是相当混乱的。根本问题是公共类扩展了非公共类。也许语言应该禁止这样做。

于 2013-04-11T22:50:18.133 回答
-1

有 4 种不同的访问级别:公共、私有、受保护和包私有。public 对所有东西都是可见的,甚至在包之外。Private 仅在课堂内可见。Protected 对类和所有扩展它的类都是可见的。Package-private 是默认值(当您不指定任何其他值时),它对一个包中的所有类可见,其中变量被初始化

于 2013-04-11T22:30:07.313 回答