package org.zhou.hello.chapcter14_1;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;public class SimpleEventDemo extends JFrame{
public SimpleEventDemo(){
JButton jbtOK=new JButton("OK");
setLayout(new FlowLayout());
add(jbtOK);
OKListener listener=new OKListener(); jbtOK.addActionListener(listener);
}

public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame  frame=new SimpleEventDemo();
frame.setTitle("SimpleEventDemo");
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(220, 80);
frame.setVisible(true);
}}将红色的代码改成ActionListener listener=new OKListener();运行上没有区别OKListener的实现:package org.zhou.hello.chapcter14_1;import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class OKListener implements ActionListener{
public void actionPerformed(ActionEvent e){
System.out.println("It is OK");
}
}
既然ActionListener是接口为什么可以在上面的类中实例化?

解决方案 »

  1.   

    ActionListener listener=new OKListener();运行上没有区别 注意,前面是声明,后面才是实例化。
    而OKListener是实现了ActionListenner的。所以这么写是正确的。
    不过直接的
    ActionListener listener=new ActionListener (); 就是错误的了。
      

  2.   

    ActionListener是接口,但OKListener是类,上面实例化的是类listener。ActionListener listener=new OKListener();
    OKListener listener=new OKListener(); 接口可以指向它的实现类,上只是引用类型不一样,listener调用方法都是OKListener对象的
      

  3.   

    new XXXX();才是实例化,前面那个只是引用类型.上面的说得很清楚了.