可以子类初始化超类变量

时间:2016-09-29 16:41:37

标签: java android class inheritance

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

4 个答案:

答案 0 :(得分:1)

似乎你希望变量值保持不变并始终保持相同。

但是既然你只想让你继承的类能够更新或读取变量,你可以这样做:

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
  {

  }

在你的静态虚空主体中:

  new B().set(101);

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

尝试以下方法: 在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);
    }

}

或者你可以尝试使用封装:将字符串标记为私有并使" global"通过getter和setter提供的字符串。这通常是一个更灵活的解决方案,然后使用静态变量

http://www.tutorialspoint.com/java/java_encapsulation.htm

答案 3 :(得分:0)

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

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

在android中我们有Application类可以保存全局数据。有关参考,请参阅Android global variable