【问题标题】:How to get information back and forth between classes?如何在类之间来回获取信息?
【发布时间】:2021-01-11 00:09:18
【问题描述】:

您好,我正在学习如何在一个代码中处理多个类,但这是一个问题,我无法弄清楚它是如何被调用的,也无法回答它。所以我在 Back 类中有一个变量 x,我把它放到 main 然后我想把它推回 back 类,然后再把它拉到 main。它是一个简化的代码,因此我可以将其用作示例来根据某些条件更改其他类中的变量。目前它不工作。

package Classes;
public class Main {
    public static void main(String[] args) {
        Back Q = new Back();
        double f = Q.x;
        System.out.println(Q.g);
    }
}
//-------------------
package Classes;
public class Back {
    Main K = new Main();
    double x = 10;
    double g= K.f; //f cannot be resolved or is not a field
}

【问题讨论】:

  • 您期望K.f 是什么? Q.x 有效吗? Q.g 是什么?我认为一个好的起点可以是学习instance variablesstatic variableslocal variables 的概念。

标签: java class variables


【解决方案1】:

首先,您需要阅读更多关于 java 中的访问修饰符的信息。您必须了解几件主要的事情:

  1. 静态和非静态成员的区别;
  2. 不同访问级别(公共、受保护、包私有/默认和私有)之间的差异;
  3. 局部变量。

这些东西可以帮助你决定你需要什么类型的变量。

现在您正尝试通过新创建的对象从静态 main 方法访问邻居类中的非静态包私有变量,这没问题。

但您也尝试从非静态对象内部访问在静态方法中定义的局部变量——这是不可能的。相反,最好引入 setter 方法或引入其他接受外部参数的方法。

【讨论】:

    【解决方案2】:

    Back 类中的属性 x 是包私有的,因此可以通过您在 main() 中创建的名为 Q 的 Back 对象直接访问它。

    在 Back 类中,您尝试访问 Main 类的属性 f,该属性 f 被名为 K 的对象引用。但是 Main 类没有定义任何属性。

    在 Main() 方法的范围内只有一个名为 f 的局部变量,该方法已在 Main 类中定义。

    一个可能的解决方案可能是这样的。但我不知道你想用你的代码解决什么问题。所以这里只是一个应该编译的想法......

    package Classes;
    public class Main {
    
        double d = 5.0;
    
        public static void main(String[] args) {
            Back Q = new Back();
            double f = Q.x;
            System.out.println(Q.g);
        }
    }
    //-------------------
    package Classes;
    public class Back {
        Main K = new Main();
        double x = 10;
        double g = K.d;
    }
    

    【讨论】:

    • 我该如何解决这个问题?
    • 我添加了一个应该编译的建议。不知道是不是你想要达到的。
    • 类成员的默认可见性是包私有的,而不是公共的。此外,如果与原始问题中的示例相比,您的代码会做非常不同的事情。
    猜你喜欢
    • 1970-01-01
    • 2019-12-08
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多