gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 04:55:09 32 4
gpt4 key购买 nike

我读了一本关于 OOP 的书,并且关于“ protected ”访问修饰符的示例对我来说很奇怪。

例子总结

  1. 这个例子是为了测试“protected”保留字对变量的影响。
  2. ClassA 有 2 个 protected 变量(静态/非静态)

    package a;

    public Class A {

    protected int a;
    protected static int b;
    }


  1. ClassB 派生自 ClassA 并位于另一个包
  2. 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”关键字访问它。我该如何理解?

很快 A) 没问题,但为什么 B) 可执行?

最佳答案

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

关于java - 'protected' 和 'protected-static' 变量有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34081468/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com