这是一个非常基本的问题,但我非常想解释为什么我的问题能够或不能实现。
如果我有一个类(A),其中包含一个字符串,并带有该字符串的set方法。我从第一个类(A)实例化另一个类(B),为什么我不能从新类(B)访问第一个类(A)来为第一个类中的字符串调用set方法(A )。
我问的唯一原因是我正在处理一个类似问题的项目,从主类我创建一个返回一些按钮的新类。当单击一个按钮时,主类中的ActionListener应该更改初始类中的String,但是我似乎无法在不重新实例化类的情况下访问原始类的set方法。
很抱歉,如果这听起来很混乱,但我真的想了解为什么这是一个问题,以及正确的做法是什么。我知道我可能会对此感到失望,但感谢任何帮助。
答案 0 :(得分:2)
因为B类需要保存已创建它的A实例的引用。默认情况下没有正式的理由。例如:
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);
}
}
答案 1 :(得分:1)
不知道它是否是最优雅的解决方案,但是如果你想让B类的对象引用A类对象(创建者),你可以使用Alessandro类(B)的示例代码和类似这样的东西在A班:
public class A
{
private String text;
public void createB()
{
new B(this);
}
public void setText(String b)
{
text = b;
}
}
答案 2 :(得分:0)
Class
引用,否则无法调用 Object
。所以你必须在B组中创建这样的东西
myobject = FirstClass.new //I am not sure about java syntax as its been many years.
然后你可以在这个对象上调用FirstClass的所有方法,并在SecondClass中使用它们。
答案 3 :(得分:0)
如果B扩展A,则可以调用B中与A有关的公共方法。
如果B没有扩展A,则它不知道A的方法。这就是Java的继承工作方式。