import java.awt.*;
import java.awt.event.*;public class ChatClient extends Frame { TextField tfTxt = new TextField();
TextArea taContent = new TextArea(); public static void main(String[] args) {
new ChatClient().launchFrame(); } public void launchFrame() {
setLocation(400, 300);
this.setSize(300, 300);
add(tfTxt, BorderLayout.SOUTH);
add(taContent, BorderLayout.NORTH);
pack();
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

setVisible(true);
}}
这里的windowadapter是一个抽象类,但是前面用了一个new方法,这是实例化的过程么?但是,不是说抽象类不可以实例化么? 如果说这个不是实例化 new windowadapter又是什么意思?这里的匿名类是配合new windowadapter使用么?还是仅是为了精简代码?

解决方案 »

  1.   

    这里实例化的是windowadapter的一个匿名内部类,而不是windowadapter本身,这是一种简洁的写法而已。
      

  2.   

    刚看了下匿名内部类的内容 是不是匿名内部类可以为抽象类创建一个无名的继承其的对象?如果上面不用匿名内部类 windowadapter文中加粗的那部分可以怎么来写?
      

  3.   

    那就要定义一个类继承windowadapter,当然,可以定义成内部类。另外,不管是不是抽象类,或是接口,都可以想这样来创建匿名内部类。
      

  4.   

    困死我了,睡觉了。大家关注一下我的帖子哦,“Ubuntu OpenJDK UTF-8文件读取中文乱码”,愁死我了。
      

  5.   

    +1 
    写了一下供参考:import java.awt.*;
    import java.awt.event.*;public class ChatClient extends Frame
    { TextField tfTxt = new TextField();
    TextArea taContent = new TextArea(); public static void main(String[] args)
            {
    new ChatClient().launchFrame();
    } public void launchFrame()
            {
    setLocation(400, 300);
    this.setSize(300, 300);
    add(tfTxt, BorderLayout.SOUTH);
    add(taContent, BorderLayout.NORTH);
    pack(); MyWindowAdapter mwa=new MyWindowAdapter();    //生成一个继承了WindowAdapter类的新类的对象。
    this.addWindowListener(mwa);    //替换匿名类。
    /*this.addWindowListener(new WindowAdapter() 
    {
    @Override
    public void windowClosing(WindowEvent e) 
    {
    System.exit(0);
    }
    });
    */
    setVisible(true);
    }}
    //定义一个类继承WindowAdapter
    class MyWindowAdapter extends WindowAdapter
    {
    @Override
    public void windowClosing(WindowEvent e) 
    {
    System.exit(0);
    }
    }