如何从子类修改超类变量?
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
,这样才能被子类访问。
在 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
,这样才能被子类访问。