Java-类实例化和访问的基础知识

Java-类实例化和访问的基础知识,java,class,instantiation,Java,Class,Instantiation,这是一个非常基本的问题,但我很想解释一下为什么我的问题能够或不能实现 如果我有一个类(a),它包含一个字符串,并为该字符串设置了一个方法。我实例化了第一个类(A)中的另一个类(B),为什么我不能访问新类(B)中的第一个类(A)来调用第一个类(A)中字符串的set方法呢 我问这个问题的唯一原因是我正在处理一个类似问题的项目,从一个主类我创建了一个新类,它返回一些按钮。当单击一个按钮时,主类中的ActionListener应该更改初始类中的字符串,但是如果不重新实例化该类,我似乎无法访问原始类的se

这是一个非常基本的问题,但我很想解释一下为什么我的问题能够或不能实现

如果我有一个类(a),它包含一个字符串,并为该字符串设置了一个方法。我实例化了第一个类(A)中的另一个类(B),为什么我不能访问新类(B)中的第一个类(A)来调用第一个类(A)中字符串的set方法呢

我问这个问题的唯一原因是我正在处理一个类似问题的项目,从一个主类我创建了一个新类,它返回一些按钮。当单击一个按钮时,主类中的ActionListener应该更改初始类中的字符串,但是如果不重新实例化该类,我似乎无法访问原始类的set方法


很抱歉,如果这听起来很杂乱,但我真的想了解为什么这是一个问题,以及正确的做法是什么。我知道我可能会在这个问题上被击倒,但任何帮助都是非常感谢的。

因为类B需要保存一个从中创建它的实例的引用。默认情况下,没有正式的理由这样做。例如:

public class B {

    private final A creator; 

    public B(A creator) {
        // you might want to check for non null A
        this.creator = creator;
    }

    public void foo(String value) {
        creator.setText(value);
    }
}

除非类被
对象引用,否则不能调用它。所以你必须在B类中创建类似的东西

myobject = FirstClass.new  //I am not sure about java syntax as its been many years.

然后您可以在这个对象上调用第一类的所有方法,并在第二类中使用它们

如果B扩展了A,则可以调用B中与A相关的公共方法


如果B不扩展A,它就不知道A的方法。这就是Java继承的工作原理。

不知道它是否是最优雅的解决方案,但如果您希望类B的对象引用类a的对象(创建者),您可以使用类(B)的Alessandro示例代码以及类a中的类似代码:

public class A
{
    private String text;

    public void createB()
    {
        new B(this);
    }

    public void setText(String b)
    {
        text = b;
    }
}

我不确定我是否理解这个问题,你能提供一个简短的可编译的例子来描述这个问题吗?这听起来很像你所说的“我从第一个类(a)实例化另一个类(B)”的意思?虽然您可能希望向新对象添加一个存在的引用。我尝试了您的解决方案,但出现了错误:线程“AWT-EventQueue-0”java.lang.NullPointerException中出现异常。我不明白为什么我会收到这个错误信息,你能帮我吗?