2012-07-18 85 views
0

这可能看起来像一个愚蠢的问题,但对象是否可以从实例化它的对象中调用方法?来自子类的父类中的调用方法

具体来说,如果我有一个扩展JFrame的类A来提供一个GUI类和类B和C,它们是具有不同组件的JPanel类型,那么哪个A类对象在B和C之间变化,以向用户显示不同的内容。 B类对象是否可以调用类A的方法而不在B中创建另一个类A的对象,而是调用其中有B的上A对象?

+0

您可以在实例化时设置A到B. – JMelnik 2012-07-18 10:52:57

+0

是否像1. A有一个B的对象... 2. A有一个方法'methodA' 3.你想从B调用'methodA'? – Mohayemin 2012-07-18 10:56:27

+0

是的。例如,一个对象,它是带有菜单的整体空白JPanel容器,它依次调用带有组件的JPanel的B对象,以及用户与组件(例如按钮)交互时的对象。那B按钮动作事件调用A的方法,根据按钮更改显示,如果这是有道理的.. – Ben 2012-07-18 11:42:46

回答

1

我看到的最简单的方法是将A传递给B和C,可以通过参数或B/C的扩展来保存A实例并具有setter。

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(); 
    } 
} 
+0

谢谢你们,这真的给了我一些工作。我会给它一个旋转,看看它如何。干杯 – Ben 2012-07-18 11:45:09

0

最好的解决方案是让实例化的代码将自己的引用传递给它正在创建/创建的对象。

这在理论上是可能的目的是找出哪些创造了它(通过创建Exception并查看其堆栈跟踪)......但有正在执行的应用程序中没有办法找出创建实例

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(); 
     } 
    } 
}