Java 子类能否初始化超类变量

Java 子类能否初始化超类变量,java,android,class,inheritance,Java,Android,Class,Inheritance,我有一个活动,比如说一个被许多其他活动扩展的活动,我在活动A中有一个变量,它被扩展它的所有其他子活动(类)使用。我想知道我是否可以从一个子活动中为该变量设置一个值,这样更改将反映在扩展活动a的所有其他子类中。 我知道这是一个基本的问题,我是新来的任何帮助是感谢 eg: Activity A has public String global = "ABC" Activity B extent A display(global); ---> ABC Activity C extent A

我有一个活动,比如说一个被许多其他活动扩展的活动,我在活动A中有一个变量,它被扩展它的所有其他子活动(类)使用。我想知道我是否可以从一个子活动中为该变量设置一个值,这样更改将反映在扩展活动a的所有其他子类中。 我知道这是一个基本的问题,我是新来的任何帮助是感谢

eg:
Activity A has
public String global = "ABC"

Activity B extent A
display(global); ---> ABC

Activity C extent A
display(global); ---> ABC

Activity D extent A
display(global); ---> ABC  

现在,我如何更改活动D中的全局变量,使活动B和C也受到影响。

您需要在活动a中创建一个静态变量

静态变量是类的变量,而不是对象的变量。

请尝试以下操作: A班

public static String global = "ABC";
B班

public class B extends A {


    public static void main(String[] args) {
    B b = new B();
    A a = new A();
    System.out.println(b.global);
    System.out.println(a.global);
    System.out.println(global);
    }

}
或者,您可以尝试使用封装:将字符串标记为private,并通过getter和setter使“global”字符串可用。这通常是比使用静态变量更灵活的解决方案


您可以拥有一个singleton类,该类可以保存全局数据,并且在需要时可以从singleton类的单个公共共享实例获取数据。但还有另一个更好的方法

你需要一门在你的活动之上的课。在任何应用程序中,我们通常都有一个这样的类(可能是一些Initilizer或main或manager类),用于连接实体并启动我们的应用程序


在android中,我们有一个可以保存全局数据的应用程序类。参考请参见

似乎您需要一个值始终保持不变的变量

但是,由于您只希望继承的类能够更新或读取变量,因此可以执行以下操作:

class A
{
  private static int your_var = 0;

  public int get()
  {
     return your_var;
  }
  public void set(int a)
  {
      your_var = a;
  }
}

 class B extends A
  {

  }

  class C extends A
  {

  }
在静态void main中:

  new B().set(101);

  new C().get()  // this will return value 101.

注意:这里只创建一个变量的副本。由于它是私有的,只有非静态getter setter方法才能读取或修改它。因此,它只能由包含类本身或子类对象访问。

如果它是实例变量,则任何更改都只会影响该实例。听起来您可能需要一个静态变量。这解决了我的问题,多亏了帮助,我在活动a中使用了一个静态变量,并在活动B(扩展活动a)中更改了它的值,但当活动C(扩展a)被调用时,更改没有生效。