在Java中,我有类似的东西
public class A {
private String title;
public A () {
// do something
}
public void run () {
B b = new B();
b.run();
}
public void changeTitle(String newTitle) {
this.title = newTitle;
}
}
public class B {
public B() {
// do something
}
public void run() {
}
}
我的问题是在B的方法run()中,是否可以在A中调用方法changeTitle()来更改实例化B的A实例的标题?
由于
答案 0 :(得分:1)
如果B在其构造函数中接受A类型,并且当您说新B时,传入'this'类似于
public void run () {
B b = new B(this);
b.run();
}
现在你有一份你正在使用的A对象的副本。
答案 1 :(得分:1)
B
只能在A
上调用方法,如果它包含对A
实例的引用。您可以将A的实例传递给B来实现此目的。
public void run () {
B b = new B(this);
b.run();
}
public class B {
private A a;
public B(A a) {
this.a = a;
a.changeTitle("Ha!");
}
}
答案 2 :(得分:0)
不确定。在A
的构造函数中传递B
的实例。
答案 3 :(得分:0)
只有在调用B的run()方法时将this
作为参数传递,才能执行此操作。
答案 4 :(得分:0)
除非你安排B
的实例知道他们应该做什么A
的实例(例如,将其传递给B
的构造函数并记住它)。
如果您正在执行此类操作,那么您应该考虑,例如,如果B
的实例是由A
的实例以外的其他内容创建的,那么您希望发生什么。
答案 5 :(得分:0)
没有。因为这样的B实例不知道是谁创造了它。
但是B为:
public class B {
private A creator;
public B(A creator) {
this.creator = creator;
// do something
...
}
并在new B(this)
中创建A.run()
,B可以在其run()方法中调用creator.changeTitle("whatever")
。
答案 6 :(得分:0)
B是A的非静态内部类,你可以调用A的方法(并访问它的fieldes)。