首页 文章

与'protected'和'protected-static'变量有什么区别?

提问于
浏览
1

我读了一本关于OOP的书,关于'protected'访问修饰符的例子对我来说很奇怪 .

Summary of example

  • 这个例子是测试'protected'对变量的保留字效应 .

  • ClassA有2个受保护的变量(静态/非静态)

package a;

public Class A {

    protected int a;
    protected static int b;
}
  • ClassB派生自ClassA并位于另一个包中

  • ClassB.test有一个检查可访问性的方法(无法运行)

package b;

public Class B extends ClassA {

    ClassA x = new ClassA();

    // [O] : Executable
    // [X] : Not-executable
    void test() {

        a = 1;   // [O] : Derived from ClassA
        b = 1;   // [O] : Derived from ClassA

        // [X] : a is protected, so only accessible within codes in derived class
        x.a = 1; // A) 

        // [O] : I don't know why it is executable
        x.b = 1; // B) 
    }
}

实际上,b是'protected'所以我认为它不能像 x.a = 1; 这样的实例变量访问
但是可以使用'static'关键字访问它 . 我怎么能理解这个?

Shortly A) is fine, but why is B) executable ?

1 回答

  • 3

    static 关键字表示变量属于类本身而不是所述类的对象 . 您可以使用 ClassA.b 替换对 x.b 的调用 . 由于 ClassB 扩展 ClassA ,因此 ClassB 的所有方法始终可以访问所有 protected static 变量 .

相关问题