来自子类的父类中的调用方法
问题描述:
这可能看起来像一个愚蠢的问题,但对象是否可以从实例化它的对象中调用方法?来自子类的父类中的调用方法
具体来说,如果我有一个扩展JFrame的类A来提供一个GUI类和类B和C,它们是具有不同组件的JPanel类型,那么哪个A类对象在B和C之间变化,以向用户显示不同的内容。 B类对象是否可以调用类A的方法而不在B中创建另一个类A的对象,而是调用其中有B的上A对象?
答
我看到的最简单的方法是将A传递给B和C,可以通过参数或B/C的扩展来保存A实例并具有setter。
答
您可以尝试将引用放置在创建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();
}
}
+0
谢谢你们,这真的给了我一些工作。我会给它一个旋转,看看它如何。干杯 – Ben 2012-07-18 11:45:09
答
最好的解决方案是让实例化的代码将自己的引用传递给它正在创建/创建的对象。
这在理论上是可能的目的是找出哪些类创造了它(通过创建Exception
并查看其堆栈跟踪)......但有正在执行的应用程序中没有办法找出创建实例 。
答
看起来像你需要这样的东西。
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();
}
}
}
您可以在实例化时设置A到B. – JMelnik 2012-07-18 10:52:57
是否像1. A有一个B的对象... 2. A有一个方法'methodA' 3.你想从B调用'methodA'? – Mohayemin 2012-07-18 10:56:27
是的。例如,一个对象,它是带有菜单的整体空白JPanel容器,它依次调用带有组件的JPanel的B对象,以及用户与组件(例如按钮)交互时的对象。那B按钮动作事件调用A的方法,根据按钮更改显示,如果这是有道理的.. – Ben 2012-07-18 11:42:46