是否有可能在java中没有继承的情况下将变量的值从一个类移动到另一个类?

时间:2013-06-13 19:52:50

标签: java class class-design static-members argument-passing

我学会了如何在两个类之间调用方法甚至变量。我想知道你是否可以在不使用继承的情况下将值从一个类移动到另一个类。这是一个例子:

  1. 我创建了两个类:class1和class2。
  2. 我输入一个值为class1的变量。
  3. 将变量的值移动到class2。
  4. 让值由class2中的if语句测试。
  5. 类2中的输出可以移动到class1或方法,class2中的输出可以在class1中调用。
  6. 这不是一个真正的程序架构,它只是为了我的学习目的。谢谢。 更新: 我被要求发布一些代码,说明我已经做了什么来表明上面的想法。 这是一个类:

    class MainClass
    {
    public static void main(String[] args)
    {
        System.out.println("You have entered: " + args[0]);
        static int num = Integer.parseInt(args[0]);
        SubClass.calc(); //I believe I override it by passing value to a method within SubClass
    }
    
    }
    

    这是第二节课:

    class SubClass
    {
        public static void calc()
    {
        System.out.println("This is the output" + MainClass.num);
    }
    }
    

    我试图将args [0]中的值从MainClass移动到SubClass,但是当我尝试将它从string转换为int数据类型时出现错误:

    pavel@pavel-OptiPlex-GX270:~/myjava$ javac MainClass.java
    MainClass.java:9: error: cannot find symbol
    static int num = Integer.parseInt(args[0]);
                                      ^
    symbol:   variable args
    location: class MainClass
    1 error
    

    我有什么办法可以解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

您无法在方法中声明静态变量:

尝试像这样编辑你的主类:

public class MainClass {

    private static int num;

    public static void main(String ... args) {
        System.out.println("You have entered: " + args[0]);
        num = Integer.parseInt(args[0]);
        SubClass.calc();

        //even better, pass in the argument
        SubClass.calc2(num);
    }

    public static int getNum() {
        return num;
    }

}

你的SubClass就像这样:

public class SubClass {
    public static void calc() {
        System.out.println("This is the output" + MainClass.getNum()); //invoke the public getter method. We hid the original num variable with private keyword
    }

    public static void calc2(int number) { 
        System.out.println(number);
    }
}

答案 1 :(得分:1)

SubClass.calc(); //I believe I override it by passing value to a method within SubClass

,你没有覆盖它。只有当你extends另一个班级时,覆盖才能进入画面。另请注意,您无法覆盖static成员,因为它们属于Class。您不必创建Class的实例来调用它们

此外,您还必须先了解 访问修饰符 。访问另一个类的成员的简单规则是,如果该类是可见的,并且如果其成员没有限制访问,那么您可以访问它们。

答案 2 :(得分:0)

使用静态,您可以存档:

public class class1
{
public static string myname = "light";


}

public class2 {

public static void displayMyname()
{
    System.out.println(class1.myname);
}

    }

请注意,显示值的方法也必须是静态的。