Java 子类能否初始化超类变量
我有一个活动,比如说一个被许多其他活动扩展的活动,我在活动A中有一个变量,它被扩展它的所有其他子活动(类)使用。我想知道我是否可以从一个子活动中为该变量设置一个值,这样更改将反映在扩展活动a的所有其他子类中。 我知道这是一个基本的问题,我是新来的任何帮助是感谢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
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)被调用时,更改没有生效。