Java-类实例化和访问的基础知识
这是一个非常基本的问题,但我很想解释一下为什么我的问题能够或不能实现 如果我有一个类(a),它包含一个字符串,并为该字符串设置了一个方法。我实例化了第一个类(A)中的另一个类(B),为什么我不能访问新类(B)中的第一个类(A)来调用第一个类(A)中字符串的set方法呢 我问这个问题的唯一原因是我正在处理一个类似问题的项目,从一个主类我创建了一个新类,它返回一些按钮。当单击一个按钮时,主类中的ActionListener应该更改初始类中的字符串,但是如果不重新实例化该类,我似乎无法访问原始类的set方法Java-类实例化和访问的基础知识,java,class,instantiation,Java,Class,Instantiation,这是一个非常基本的问题,但我很想解释一下为什么我的问题能够或不能实现 如果我有一个类(a),它包含一个字符串,并为该字符串设置了一个方法。我实例化了第一个类(A)中的另一个类(B),为什么我不能访问新类(B)中的第一个类(A)来调用第一个类(A)中字符串的set方法呢 我问这个问题的唯一原因是我正在处理一个类似问题的项目,从一个主类我创建了一个新类,它返回一些按钮。当单击一个按钮时,主类中的ActionListener应该更改初始类中的字符串,但是如果不重新实例化该类,我似乎无法访问原始类的se
很抱歉,如果这听起来很杂乱,但我真的想了解为什么这是一个问题,以及正确的做法是什么。我知道我可能会在这个问题上被击倒,但任何帮助都是非常感谢的。因为类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中出现异常。我不明白为什么我会收到这个错误信息,你能帮我吗?