对场修改器感到困惑?

时间:2014-10-28 03:07:33

标签: java access-modifiers

例如,如果我们有:

package a;

public class A {
    private int moo
    protected int cow
    int spot;
public A() {
}
}

和...

package p; 
Import p.A; 
public class C extends A {
    int what; 
public C (A a) {
 what = cow;
 what = spot; 
}
}

那么为什么= spot有效且what = spot无效? (或者至少根据我的注释,什么=斑点无效。)

3 个答案:

答案 0 :(得分:0)

您的代码中没有zoo变量。反正..

由于类A位于包a中,C包中的p个类,C无法访问包私有变量spot 。 如果您希望通过扩展类来访问spot,请将其访问修饰符更改为protected

答案 1 :(得分:0)

具有默认可见性的

spot对于除其自己的包之外的任何类都不可见,即package a

在此处查看更多详情:Visibility Modifiers

答案 2 :(得分:0)

它是一个简单的访问修饰符问题,这是默认访问修饰符的用途,并将其与其他修饰符分开。 如果给定变量默认访问,则只能在同一个包中访问它。即使你在其他包中扩展了类。