Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与'有什么区别;受保护';和';防静电';变量?_Java_Oop_Static_Protected - Fatal编程技术网

Java 与'有什么区别;受保护';和';防静电';变量?

Java 与'有什么区别;受保护';和';防静电';变量?,java,oop,static,protected,Java,Oop,Static,Protected,我读了一本面向对象编程和 关于“受保护”访问修饰符的示例对我来说很奇怪 示例摘要 本例旨在测试“受保护”保留字对变量的影响 ClassA有2个受保护的变量(静态/非静态) ClassB派生自ClassA并位于另一个包中 ClassB.test有一个检查可访问性的方法(无法运行) 实际上,b是“受保护的”,所以我认为它不能被实例变量访问,比如x.a=1 但它可以通过“static”关键字访问。 我怎么能理解这个 简而言之A)可以,但是B)为什么是可执行的?关键字static表示变量属于类

我读了一本面向对象编程和 关于“受保护”访问修饰符的示例对我来说很奇怪

示例摘要

  • 本例旨在测试“受保护”保留字对变量的影响
  • ClassA有2个受保护的变量(静态/非静态)


  • ClassB派生自ClassA并位于另一个包中
  • ClassB.test有一个检查可访问性的方法(无法运行)


  • 实际上,b是“受保护的”,所以我认为它不能被实例变量访问,比如x.a=1
    但它可以通过“static”关键字访问。 我怎么能理解这个


    简而言之A)可以,但是B)为什么是可执行的?

    关键字
    static
    表示变量属于类本身,而不是所述类的对象。您可以将对
    x.b
    的调用替换为
    ClassA.b
    。由于
    ClassB
    扩展了
    ClassA
    ,因此
    ClassB
    的所有方法都可以随时访问所有受保护的静态变量

    我不明白你的帖子,请说得更清楚。如果你能更新你的示例代码,让我们知道编译器错误的确切位置吗?@TimBiegeleisen为方便起见。我将编译器错误标记为[X]-不可执行。
    package a;
    
    public Class A {
    
        protected int a;
        protected static int b;
    }
    
    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) 
        }
    }