【问题标题】:Is it possible to move variable's values from one class to another class without inheritance in java?是否可以将变量的值从一个类移动到另一个类而无需在 java 中继承?
【发布时间】:2013-06-13 19:52:49
【问题描述】:

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

  1. 我创建了两个类:class1 和 class2。
  2. 我输入了一个具有 class1 值的变量。
  3. 将变量的值移动到 class2。
  4. 让值由class2中的if语句测试。
  5. 可以将类 2 中的输出移动到类 1,或者可以在类 1 中调用具有类 2 输出的方法。

虽然这不是一个真正的程序架构,它只是为了我的学习目的。谢谢你。 更新: 我被要求发布一些我为展示上述想法所做的代码。 这是一类:

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

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

【问题讨论】:

  • Pavel,您需要发布一些代码来向我们展示您的尝试。你需要把它发布到stackoverflow,而不是在这里。
  • 嗨@pavelexpertov,我不知道你想达到什么目标,但这条路看起来不太好。尝试以可以传递参数的方式重构您的代码。
  • 我在下面有一些答案。如果您看不到,我认为我的帖子已移至 stackoverflow。由于一些奇怪的原因,我在程序员的网站上看到了我的帖子以及 stackoverflow 的帖子。

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


【解决方案1】:

您不能在方法中删除静态变量:

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

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

【讨论】:

  • 为什么要把getNum()方法放到MainClass里面?我以为你可以调用另一个类中的方法来输出数字。
  • 我没有。但通常会向“外部”世界隐藏变量,并暴露 访问器(即 get 和 set 方法;在本例中为 get 方法)
  • 好的,谢谢。什么是访问器,我只是在学习过程中,所以我正在努力学习我能学到的一切。
  • Accessors 只是遵循某些编码标准并访问类字段(变量)的方法的名称。在这里阅读更多:java.about.com/od/workingwithobjects/a/accessormutator.htm
【解决方案2】:
SubClass.calc(); //I believe I override it by passing value to a method within SubClass

,您没有覆盖它。只有当您 <strong><em>extends</em></strong> 另一个类时,才会出现覆盖。另请记住,您不能覆盖<strong><em>static</em></strong> 成员,因为它们属于类。您不必创建 Class 的实例来调用它们。

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

【讨论】:

  • 你通常使用点符号来访问另一个类的成员吗?
  • 如果它们不是static,那么我们必须通过点符号来访问它们。在这里你可能要问,使用static会员的原因是什么?因此,假设您有一个实用程序类,其方法总是返回一个随机数,那么您必须将该方法设为静态,因为无论该类的哪个实例执行该方法,它的行为总是相同。
【解决方案3】:

使用静态你可以归档:

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


}

public class2 {

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

    }

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

【讨论】:

  • 我看到了同样的事情。我认为stackoverflow只是小故障lolz。谢谢解答!!!
猜你喜欢
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 2017-03-15
相关资源
最近更新 更多