【问题标题】:Declare two classes from eachother相互声明两个类
【发布时间】:2010-04-09 02:00:28
【问题描述】:

我正在用 NetBeans 编写一个应用程序。我有两个类 MyApp_View 和 MyApp_Functions。

MyApp_View 类是这样开始的

public class MyApp_View extends FrameView {
MyApp_Functions My_functions = new MyApp_Functions();

public MyApp_View(SingleFrameApplication app) {
    super(app);

在 MyApp_Functions 我有
MyApp_View my_view = new MyApp_View(null);

我想从 MyApp_Functions 访问 MyApp_View 中的公共变量,并从视图中访问函数中的公共方法,但没有成功。

这可行吗?怎么做?

编辑: 从我得到的答案来看,我认为最好澄清一下。

如果我在 MyApp_Functions 中声明 MyApp_View 在 MyApp_View 中声明 MyApp_Functions,它会按预期工作。但是我无法从另一个类访问两个类中的公共内容。显然,我只能访问我声明的内容。

如果我尝试在 MyApp_Functions 中声明 MyApp_View 并在 MyApp_View 中声明 MyApp_Functions ,它们可以正常编译。但我在启动时收到一个空异常错误。

再次。更容易理解?这是可行的吗?如何?

【问题讨论】:

    标签: java class


    【解决方案1】:

    您需要将引用从一个传递到另一个。在最基本的情况下,它将涉及将您的第二行更改为:

    MyApp_Functions My_functions = new MyApp_Functions(this);
    

    并向 MyApp_functions 添加适当的构造函数,将引用“保存”在变量中,然后可以在您需要从 MyApp_View 访问某些内容时使用。

    但最终,您想询问此类关系是否真的有必要,并且可能重新构建系统以将其删除。

    【讨论】:

      【解决方案2】:

      MyApp_View my_view = new MyApp_View(null);

      这将创建一个新的MyApp_View 对象,该对象与构造MyApp_Function 的对象不同。听起来您想要的是让两个对象相互引用。我通常在其中一个对象的构造函数中使用参数来设置它。这是一个例子:

      class A {
          private B b;
      
          public A() {
              this.b = new B(this);
          }
      }
      
      class B {
          private A a;
      
          public B(A a) {
              this.a = a;
          }
      }
      

      现在A 类型的对象可以访问关联对象BA.b,对象B 可以访问关联对象AB.a。在您的示例中,AMyApp_ViewBMyApp_Functions

      【讨论】:

        【解决方案3】:

        访问公共成员很容易——例如,只需使用My_functions.foo 将访问MyApp_Functions 类的对象My_functions 上的公共foo 变量,同样使用my_view.bar() 将调用公共对象上的bar() 方法。

        不过,我怀疑您的问题是面向对象思维的更普遍的问题;我建议拿起一本介绍性的 Java 书籍并通读一遍——在 OO 程序员思考的方式中,没有什么可以替代良好的扎实基础。

        【讨论】:

        • 个人推荐:Kathy Sierra 和 Bert Bates 的“Head First Java”
        • 对于 OO,我宁愿推荐一些 SmallTalk 或 Ruby 的书:))
        猜你喜欢
        • 1970-01-01
        • 2019-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-22
        相关资源
        最近更新 更多