有3个不同的类:A,B,C现在结构如下:public class A {  public A(){
    B b = new B();
    C c = new C();
  }
  ...
}class B {
...
}class C {
...
}我能不能实现C类中的函数调用B类和A类中的非static数据和函数呢?举一个实际的例子,我有一个JFrame,里面包括了两个JPanel,现在其中一个JPanel需要操作另外一个JPanel中的控件,这个操作函数必须放在JFrame里吗?能不能放在自己的JPanel里呢?假如必须放在JFrame里我又如何调用JFrame里的此函数呢?如果不能调用岂不是要练相关的事件处理Listener都要放在JFrame里了?我觉得这种设计很难看啊。一个Frame里有100个Panel,难道要把他们的Listener也都挤到Frame里吗?

解决方案 »

  1.   

    好像不能,要么就设成static的有什么影响么?
      

  2.   

    class C {
        A a = new A();
        void bMethod() {
            a.aMethod();
        }
    }
      

  3.   

    非static的,访问实例里的不可以么?
      

  4.   

    public class A {
    static String aString = "a static a in class A";
    String bString = "a none static b in class A";
    public A() {
    } public static void main(String[] args) {
    new A();
    B b = new B();
    C c = new C();
    }
    }class B {
    public B() {
    }
    }class C {
    A a = new A();
    public C() {
    System.out.println(A.aString);
    //System.out.println(A.bString); //如果不注释,这里将出错,出错信息如下

    /*
      A.java:23: 无法从静态上下文中引用非静态 变量 bString
                    System.out.println(A.bString);
    */ System.out.println(a.bString);
    }
    }
      

  5.   

    我现在想明白了,就是不能。不过也没什么,确实应该将相应事件的Listener放在顶层的Frame里。Panel和其他控件一样都是Frame的成员变量而已。对比一下Delphi,其实也是这样实现的。