站内搜索: 请输入搜索关键词

当前页面: 开发资料首页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,其实也是这样实现的。


↑返回目录
前一篇: 关于java中的参数传递问题
后一篇: simpleDataFormat类怎么用