您的位置:首页 > 编程语言 > Java开发

持有对象的引用 -Java学习笔记(33)

2007-07-30 00:10 861 查看
我们很多时候会遇到一个类的成员需要用到另外的类的一些成员,这时候会有很多解决方法,例如传参或是声明内部类。但是在某些场合下他们都有弊端存在。传参不利于数据成员的管理,并且操作烦琐。内部类很好用,但是在类对象很多并且分布在很多类中时就不适用了。内部类适用于在只有一个类用到它,希望这个类把它封装起来的情况下。所以我们通常在事件响应中使用匿名内部类,因为事件响应过程的复用度不高,通常只响应一个事件而已。
经常使用的做法是索性把整个对象的引用作为另一个类的数据成员,所有访问对象成员的动作都可以通过这个对象的引用来完成。这样在逻辑上非常清楚,而且代码会更加方便,易读。

一个简单的例子(这个例子似乎用内部类会更合适)


//: HoldRef.java


import java.awt.*;


import java.awt.event.*;




/** *//**


* Holding Reference Test.


* Input two numbers and click the button to compute.


* @author nyzhl


*/




public class HoldRef ...{




public static void main(String[] args) ...{


new MyFrame();


}


}




class MyFrame extends Frame ...{


TextField tfNum1,tfNum2,tfRslt;


Label lblPlus,lblEqual;


Button btnCompute;




MyFrame() ...{


super("加法计算");


tfNum1 = new TextField(5);


tfNum2 = new TextField(5);


tfRslt = new TextField(7);


lblPlus = new Label("+");


lblEqual = new Label("=");


btnCompute = new Button("Compute");


//Construct a new object of class MyListener which holding the current object reference.


btnCompute.addActionListener(new MyListener(this));


setLayout(new FlowLayout());


add(tfNum1);


add(lblPlus);


add(tfNum2);


add(lblEqual);


add(tfRslt);


add(btnCompute);


pack();


setVisible(true);


}


}




/** *//**


* Class who holds a reference of Class MyFrame.


*/




class MyListener implements ActionListener ...{


MyFrame mf;




MyListener(MyFrame mf) ...{


this.mf = mf;


}




public void actionPerformed(ActionEvent e) ...{


int num1 = Integer.parseInt(mf.tfNum1.getText());


int num2 = Integer.parseInt(mf.tfNum2.getText());


int rslt = num1 + num2;


mf.tfRslt.setText(rslt+"");


}


}


///:~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: