如何从子类修改超类变量?

How to modify superclass variable from subclass?

在 C++ 中,我可以在多个文件中使用 1 class,当我使用一个文件中的函数修改值时,它会全局更改该值。

在 Java 中,每个文件都必须有自己的 class;当我使用一个文件中的方法更改值时,它不会全局更改此值。

例如,在 C++ 中,文件可能如下所示:

someClass.h

class someClass{
private:
    int x;
public:
    //Constructor
    someClass(){
        x = 5;
    }
    void changeVariable(); //Declaring function for later
}

main.cpp

int main(){
    someClass cClass;
    cClass.changeVariable(); //Call function
    cout << x; //outputs 6
}

fileA.cpp

void someClass::changeVariable(){
    x = 6; //x is changed to 6 globally.
}

在Java中:

someClass.java

public class someClass {
    int x;

    //Constructor
    public someClass() {
        x = 5;
    }

main.java

public class main {
    public static void main() {
        someClass cClass = new someClass();
        subClass cSub = new subClass();
        cSub.changeVariable();
        System.out.print(x); //outputs 5
    }
}

fileA.java

public class fileA extends someClass {
    void changeVariable() {
        x = 6; //x is changed to 6 only for fileA
    }
}

我的问题是如何更改子 class 中的变量,以便全局更改该变量(对于 Java)。对不起,如果问题仍然令人困惑。

试试这个:

public class someClass {
    static int x;

    //Constructor
    public someClass() {
        x = 5;
    }

那个static的变量意味着它的值对于相同class的所有对象都是通用的。只为所有对象创建一个变量 x,而不是为每个对象创建一个变量。

如果您想很好地解释静态的含义,请阅读该答案:

What does the 'static' keyword do in a class?

Expose a function. setXyz in parent

public class someClass {
    int x;
 //Constructor
    public someClass() {
        x = 5;
    }
    public void setX(int n){
         this.x = n;
     }
  } 

   public class fileA extends someClass {
    void changeVariable() {
      setX(6); 
   }

不需要静态变量,这是您在 Java:

中可以做的最等价的事情
public abstract class SomeClass {
  protected int x = 5;
  public abstract void changeVariable();
}

public class FileA extends SomeClass {
  @Override
  public void changeVariable() {
    x = 6;
  }
}

SomeClass 当然不一定是 abstract,但是您必须实现它的 changeVariable 方法。

另外x不能是private,必须是protected,这样才能被子类访问。