当前页面: 开发资料首页 → J2SE 专题 → 问一个面向对象的弱问题
问一个面向对象的弱问题
摘要: 问一个面向对象的弱问题
有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里吗?。。。
好像不能,要么就设成static的有什么影响么?
class C {
A a = new A();
void bMethod() {
a.aMethod();
}
}
非static的,访问实例里的不可以么?
call back~~~
c中生成b的对象,就可以调用了嘛
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);
}
}
我现在想明白了,就是不能。不过也没什么,确实应该将相应事件的Listener放在顶层的Frame里。Panel和其他控件一样都是Frame的成员变量而已。对比一下Delphi,其实也是这样实现的。