可以子类初始化超类变量



我有一个活动说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也应该受到影响。

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

但是,由于您只希望您的继承类能够更新或读取变量,您可以这样做:

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.

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

您需要在Activity a中创建一个静态变量。

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

你可以有一个可以保存全局数据的单例类,当需要时,你可以从单例类的单个共享实例中获取数据。但还有另一种更好的方法。

你需要一个类来管理你的活动。在任何应用程序中,我们通常都有一个这样的类(可能是一些initializer或main或manager类),它连接实体并初始化我们的应用程序。

在android中,我们有一个Application类,它可以保存全局数据。参考Android全局变量

尝试以下操作: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);
    }
}

或者你可以尝试使用封装:将字符串标记为私有,并通过getter和setter使"全局"字符串可用。这通常是比使用静态变量

更灵活的解决方案。http://www.tutorialspoint.com/java/java_encapsulation.htm

最新更新