覆盖从子类定义的静态变量是否会影响父类中所述变量的值?

时间:2017-04-22 15:32:25

标签: java

我带着一个简单的OOP问题来找你。 让我们说有三个类--A,B和C. B和C都从A继承了一个静态变量。我们也说A将这个变量的值定义为0。 让我们说B和C都修改了这个静态变量的值。 我的问题是这个 - 因为静态变量在同一个类的成员之间保持不变,这是否意味着从子类设置超类变量的值对超类的值没有影响?

换句话说,如果我们将B&#39变量的值更改为1,那么对于B类对象而不是C或A,该值只会是1?

3 个答案:

答案 0 :(得分:2)

静态字段只属于一个类,不会被其子类继承

答案 1 :(得分:0)

在这里,您可以找到适合您问题的简单java实现 结果可以解释解决方案。

 class A {
   static int variable = 0;
}

class B extends A{

}
 class C extends A{

}

public class Runclass {

    public static void main(String arg[]){
        A a = new A();
        System.out.println("A "+a.variable);

        B b = new B();
        System.out.println("B "+b.variable);

        C c = new C();
        System.out.println("C "+c.variable);

        b.variable=1;
        System.out.println("After modifying B "+b.variable);
        System.out.println(" A "+a.variable);

    }
}

输出:

A 0
B 0
C 0
After modifying B 1
A 1

答案 2 :(得分:0)

静态并不意味着不变。 final 表示您无法更改该值。
您可以使用此代码访问超类A中的变量并更改它,例如在B:A.someVariable = 1; <在此之后,如果你使用超类A变量(A.someVariable),你会看到C,B和A中的值1。
我给你一个代码示例:

package teszt;

class A {
    static int statValami=0;
}


package teszt;

class B extends A{
    void writeOut(){
        A.statValami=1;
        System.out.println(statValami);
    }
}


package teszt;

class C extends A {
    void writeOut(){
        A.statValami=100;
        System.out.println(statValami);
    }
}


包teszt;

class Over  {
    public static void main(String args[]){
        new B().writeOut();
        new C().writeOut();
        System.out.println(A.statValami);
    }
}



输出为:1 1 100
100