这看起来像是一个愚蠢的问题,但是对象是否可以从实例化它的对象中调用方法?
具体来说,如果我有一个扩展JFrame的类A来提供一个GUI和类B和C,它们是具有各种组件的JPanel类型,那么A类对象在B和C之间变化以向用户显示不同的内容。 B类的对象是否可以调用类A的方法而不在B中创建另一个类A的对象但是调用其中包含B的上层A对象?
答案 0 :(得分:1)
我看到的最简单的方法是将A传递到B和C,或者通过参数或B / C的扩展来保存A实例并且有一个setter。
答案 1 :(得分:1)
看起来你需要这样的东西。
class A {
private B b;
public void method() {
b = new B(this);
}
}
class B {
private A a;
public B(A a) {
this.a = a;
}
void callAMethod() {
a.method();
}
}
}
答案 2 :(得分:0)
您可以尝试在其中创建B或/和C对象的A对象的引用,例如使用setter或将它们作为构造函数参数传递。
class A extends JFrame{
void someMethod(){System.out.println("methods body");}
public static void main(String[] args) {
A a=new A();
B b=new B();
b.setCreator(a);
b.test();
}
}
class B extends JPanel{
private A creator;
public void setCreator(A creator) {
this.creator = creator;
}
void test(){
creator.someMethod();
}
}
答案 3 :(得分:0)
还要考虑在Swing框架中存在不同的方法来获取getParent()或getRoot()等组件的层次结构。
答案 4 :(得分:0)
最好的解决方案是让实例化的代码将自己的引用传递给它正在创建/创建的对象。
理论上,对象可以找出哪个类创建它(通过创建Exception
并查看其堆栈跟踪)...但是在执行的应用程序中没有办法找出创建实例。