是否可以移动变量';在java中,将值从一个类转换到另一个类而不进行继承?
我已经学会了如何在两个类之间调用方法甚至变量。我想知道是否可以在不使用继承的情况下将值从一个类移动到另一个类。以下是一个例子:是否可以移动变量';在java中,将值从一个类转换到另一个类而不进行继承?,java,class,class-design,static-members,argument-passing,Java,Class,Class Design,Static Members,Argument Passing,我已经学会了如何在两个类之间调用方法甚至变量。我想知道是否可以在不使用继承的情况下将值从一个类移动到另一个类。以下是一个例子: 我创建了两个类:class1和class2 我在class1中输入一个值为的变量 将变量的值移动到class2 让类2中的if语句测试值 类2中的输出可以移动到类1中,或者可以在类1中调用具有类2中输出的方法 这不是一个真正的程序架构,只是为了我的学习目的。非常感谢。 更新: 我被要求发布一些代码,说明我做了什么来展示上述想法。 这里有一节课: class MainCl
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
我能做些什么来解决这个问题吗?使用static,您可以归档:
public class class1
{
public static string myname = "light";
}
public class2 {
public static void displayMyname()
{
System.out.println(class1.myname);
}
}
请注意,显示值的方法也必须是静态的。您不能在方法中删除静态变量: 尝试按如下方式编辑主类:
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;
}
}
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);
}
}
您的子类如下所示:
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;
}
}
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);
}
}
SubClass.calc()//我相信我通过将值传递给子类中的方法来重写它
否,您没有覆盖它。只有当您扩展另一个类时,才会出现重写。还请记住,您不能重写静态成员,因为它们属于类。您不必创建类的实例来调用它们。
此外,您还必须首先了解访问修饰符。访问另一个类的成员的简单规则是,如果该类可见,并且其成员没有限制性访问权限,则可以访问它们。Pavel,您需要发布一些代码,向我们展示您的尝试。你需要把它发布到stackoverflow,而不是这里。嗨@pavelexpertov,我不知道你想达到什么目的,但这条路看起来不太好。试着重构你的代码,让它能够传递传递参数。如果你看不见,我想我的帖子被转移到stackoverflow了。出于某种奇怪的原因,我在程序员的网站上看到了我的帖子以及stackoverflow的帖子。为什么必须将getNum()方法放在MainClass中?我以为你可以调用另一个类中的方法来输出数字,但我没有。但是在“外部”世界中隐藏变量并公开访问器(即get和set方法;在本例中是get方法)是很常见的。谢谢。什么是访问器,我只是在学习过程中,所以我试图学习我能学的一切。访问器只是遵循特定编码标准并访问类字段(变量)的方法的名称。在这里读更多:我看到了同样的事情。我想stackoverflow只是搞错了lolz。谢谢你的回答!!!您通常使用点符号访问另一个类的成员吗?如果它们不是静态的
,那么我们必须通过点符号访问它们。在这里,您可能要问,使用静态
成员的原因是什么?因此,假设您有一个实用程序类,它的方法总是返回,比如说,一个随机数,那么您必须使该方法成为静态的,因为无论该类的哪个实例执行了该方法,它的行为总是相同的。