如何覆盖类变量值

时间:2018-07-25 12:21:23

标签: java

这是示例参考示例,适用于我正在寻找的解决方案

参考示例:

  • demoName是全局变量
  • 我需要以某种方式在类级别上定义该变量:String demo = demoName;
  • 现在,当从本地方法调用时,它需要使用本地变量覆盖变量值。

    void test(String name) { demoName = name; System.out.println("Local Value:" + demoName); System.out.println("Global Value:" + demo); }

在这里demoName被参数值覆盖,但是当+ demo采用XYZ的类级别值时,我希望它是abc。

class demo1 {
    public static String demoName = "xyz";
}

public class demos extends demo1 {

    String demo = demoName;

    void test(String name) {
        demoName = name;
        System.out.println("Local Value:" + demoName);
        System.out.println("Global Value:" + demo);
    }

    @Test
    public void testtest() {
        test("abc");
    }    
}

我希望两个值都为“ abc”。

2 个答案:

答案 0 :(得分:2)

由于adddemoName,因此您可以使用public从任何地方重新分配它,根本不需要子类。

但是,使用公共静态变量并重新分配很糟糕。如果只想在子类的实例级别覆盖它,则应使用访问器并覆盖访问器

Demo.demoName = "abc";

答案 1 :(得分:0)

  

字符串在Java中是不可变的

注意: :当两个String变量引用同一个对象时,如果一个变量在任何阶段更改其对象,则仅更改该变量Object而不更改另一个变量对象。

 String demo = demoName;

在这行代码中,两个变量都引用相同的对象xyz 这意味着demo和demoName具有xyz

之后不更改其对象的原因
@Test
    public void testtest() {
        test("abc");
    }  

因为字符串在Java中是不可变的。请参阅Why is String immutable in Java? https://www.programcreek.com/2013/04/why-string-is-immutable-in-java/

例如:

static String a="Helloworld";
static String b=a;

public static void main(String[] args) {

    System.out.println(a);
    System.out.println(b);
    a="World";
    System.out.println(a);
    System.out.println(b);

}

输出:

 Helloworld
 Helloworld
 World 
 Helloworld

这是您的程序逻辑现在的流向,并且b引用其先前的Object Only。在更改了String Value之后,必须再次进行引用。下面的示例将为您提供思路。

public class Demo1 {

    public static String demoName = "xyz";
}

class Demo extends Demo1 {

    static String demo = demoName;

    public void test(String  variableName) {
        //initially i am calling both varaibles which you assign
        System.out.println(demoName);
        System.out.println(demo);
        // i am assigning the "abc" to demoName and calling both varaibales
        demoName = variableName;
        System.out.println(demoName);
        System.out.println(demo);
        // Now  i am assigning the "abc" to demo and calling both varaibales
        this.demo = variableName;
        System.out.println(demoName);
        System.out.println(demo);

    }

    public static void main(String[] args) {
        Demo dem = new Demo();
        dem.test("abc");
    }

}

输出为:

xyz
xyz
abc
xyz
abc
abc