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

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

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

// : 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
+"");
    }

}

// /:~

你可能感兴趣的:(Java)