相关疑难解决方法(0)

了解java的protected修饰符

我在package1中有一个名为A的类,在package2中有一个名为C的类.C类扩展了A类.

A有一个实例变量,声明如下:

protected int protectedInt = 1;
Run Code Online (Sandbox Code Playgroud)

这是A类的代码

package package1;

public class A {

    public int publicInt = 1;
    private int privateInt = 1;
    int defaultInt = 1;
    protected int protectedInt = 1;

}
Run Code Online (Sandbox Code Playgroud)

这是C类的代码:

package package2;
import package1.A;

public class C extends A{

    public void go(){
        //remember the import statement
        A a = new A();
        System.out.println(a.publicInt);
        System.out.println(a.protectedInt);

    }
}
Run Code Online (Sandbox Code Playgroud)

Eclipse强调了C.go()中的最后一行,并说"A.protectedInt"不可见.这似乎与oracle文档中给出的"protected"关键字的定义冲突.

protected修饰符指定只能在其自己的包中访问该成员(与package-private一样),此外,还可以在另一个包中通过其类的子类访问该成员.

这里发生了什么?

java visibility protected access-modifiers

35
推荐指数
3
解决办法
1万
查看次数

标签 统计

access-modifiers ×1

java ×1

protected ×1

visibility ×1