黑马程序员--------内部类和外部类

来源:互联网 发布:淘宝开店怎么收费标准 编辑:程序博客网 时间:2024/04/20 08:44

(一) 内部类(InnerClass)和内部类

类可以有两种重要成员:成员变量和方法,还可以有一种成员:内部类。内部类是在一个类的内部嵌套定义的类,它可以是其它类的成员,也可以在一个语句块的内部定义,还可以在表达式内部匿名定义。

内部类有如下特性:

◇ 一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称。名字不能与包含它的类名相同。

◇ 可以使用包含它的类的静态和实例成员变量,也可以使用它所在方法的局部变量。

◇ 可以定义为abstract

◇ 可以声明为privateprotected

◇ 若被声明为static,就变成了顶层类,不能再使用局部变量。

◇ 若想在inner class中声明任何static成员,则该inner class必须声明为static。。

1. 内部类使用

3-8 是一个说明内部类如何使用的例子,其中,定义了两个内部类:MouseMotionHandlerMouseEventHandler,分别用来处理鼠标移动事件和鼠标点按事件。

【例3-8

import java.awt.*;

import java.awt.event.*;

public class TwoListenInner {

  private Frame f;

  private TextField tf;

  public static void main(String args[]) {

    TwoListenInner that=new TwoListenInner();

    that.go(); 

  }

  public void go() {

   f=new Frame("Two listeners example");

   f.add("North",new Label("Click and drag the mouse"));

   tf=new TextField(30);

   f.add("South",tf);

   f.addMouseMotionListener(new MouseMotionHandler());

   f.addMouseListener(new MouseEventHandler());

   f.setSize(300,300);

   f.setVisible(true);

  

  public class MouseMotionHandler extends MouseMotionAdapter { 

    public void mouseDragged(MouseEvent e){

     String s="Mouse dragging:X="+e.getX()+"Y="+e.getY();

     tf.setText(s);

    }

  }

  public class MouseEventHandler extends MouseAdapter {

    public void mouseEntered(MouseEvent e){

     String s="The mouse entered";

     tf.setText(s);

    }

    public void mouseExited(MouseEvent e){

     String s="The mouse left the building";

     tf.setText(s);

    }

  }

}

运行这个程序,可以看到它的运行结果。当将鼠标移入frame时,文本框中会出现:"The mouse entered";当在frame中拖曳鼠标时,文本框中会出现:"Mouse dragging:X=64 Y=117";当鼠标离开文本框时,文本框中出现:"The mouse left the building"

2. 匿名类的使用

匿名类是一种特殊的内部类,它是在一个表达式内部包含一个完整的类定义。通过对上例中go()部分语句的修改,我们可以看到匿名类的使用情况。

public void go() {

  f=new Frame("Two listeners example");

  f.add("North",new Label("Click and drag the mouse"));

  tf=new TextField(30);

  f.add("South",tf);

  f.addMouseMotionListener(new MouseMotionHandler(){

     /*定义了一个匿名类,类名没有显式地给出,只是该类是

     MouseMotionHandler类的子类*/

     public void mouseDragged(MouseEvent e){

        String s="Mouse dragging:X="+e.getX()+"Y="+e.getY();

        tf.setText(s);

     }

  });

  f.addMouseListener(new MouseEventHandler());

  f.setSize(300,300);

  f.setVisible(true);

}

内部类的优缺点:

1.优点:

java中的内部类和接口加在一起,可以实现多继承。 

可以使某些编码根简洁。 

隐藏你不想让别人知道的操作。

节省编译后产生的字节码文件的大小

2. 缺点:

使程序结构不清楚

原创粉丝点击