代码之家  ›  专栏  ›  技术社区  ›  Ishita Shah Y_Sh

如何重写类变量值

  •  -2
  • Ishita Shah Y_Sh  · 技术社区  · 8 年前

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

    • 这里demoName是全局变量
    • 不知何故,我需要在类级别定义该变量,即: String demo = demoName;
    • 现在,当它从局部方法调用时,需要用局部变量重写变量值。

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

    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");
        }    
    }
    

    2 回复  |  直到 8 年前
        1
  •  2
  •   Jeremy Grand    8 年前

    demoName 是 public ,您可以使用从任何位置重新分配它 Demo.demoName = "abc"; ,根本不需要子类。

    然而 ,使用公共静态变量并重新分配是糟糕的。如果您只想在子类的实例级别重写它,那么应该使用访问器并重写 存取器

    public static class Demo {
        public static String demoName = "xyz";
    
        public String getDemoName() {
            return demoName;
        }
    }
    
    public static class Demos extends Demo {
    
        private String demoNameOverride;
    
        @Override
        public String getDemoName() {
            return demoNameOverride;
        }
    
    }
    
        2
  •  0
  •   RamanaMuttana    8 年前

    字符串在java中是不可变的

    注: 当两个字符串变量引用同一个对象时,如果一个变量在任何阶段更改其对象,则只更改该变量对象,而不更改其他变量对象。

     String demo = demoName;
    

    xyz 这意味着demo和demoName .之后不更改其对象的原因

    @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仅引用其之前的对象。更改字符串值后,必须再次执行引用。下面的例子将告诉你这个想法。

    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