内部类
内部类也成为嵌套类(inner class),是JDK1.1区别于JDK1.0最重要的新特性。内部类既可以在语块中单独定义,也可以在语句中匿名定义(匿名类)。
内部类的属性包括以下说明:
1. 类名只能在被定义的范围内使用,而且要区别于外部类;
2. 内部类可以使用外部类的类变量和实例变量,也可以使用外部类的局部变量;
3. 内部类可以声明为abstract类型;
4. 内部类可以是一个接口,而这个接口必须由另一个内部类来实现它;
5. 内部类可以被定义为private和protected,而不能被定义为public类型,被保护的内部类同样可以使用外部类定义的变量;
6. 类可以被static修饰,此时被修饰的类自动转化为顶层类,被定义为顶层类的类不能在使用其他内部类和局部范围中定义的数据和变量;
7. 内部类不能定义static型成员,只有顶层类才能定义static成员,如果内部类需要使用static型成员,这个成员必须在外部类中被定义;
将整个类的描述放在一个表达式中,也就是在定义了一个匿名类的同时创建一个对象。
import java.awt.Frame; import java.awt.Label; import java.awt.TextField; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import java.awt.event.MouseMotionListener; import javax.swing.JFrame; /** * 内部类和匿名类的使用 * @author lily data:20130325 * */ public class Practice { private static Frame frame; private TextField fTextField; public static void main(String argsString[]){ Practice practice=new Practice(); practice.go(); } public void go() { frame=new JFrame("两个监听的例子"); frame.add("North",new Label("单击鼠标")); fTextField=new TextField(30); frame.add("South",fTextField); //定义一个匿名类 frame.addMouseMotionListener(new MouseMotionListener() { public void mouseMoved(MouseEvent e) { // TODO Auto-generated method stub } public void mouseDragged(MouseEvent event) { // TODO Auto-generated method stub String string="Mouse dragging :x="+event.getX()+"Y="+event.getY(); fTextField.setText(string); } }); //定义一个内部类 frame.addMouseListener(new MouseEventHandler()); frame.setSize(300,300); frame.setVisible(true); } //定义另外一个内部类MouseEventHandler public class MouseEventHandler extends MouseAdapter { public void mouseEntered(MouseEvent event) { String string="鼠标进来了!"; fTextField.setText(string); } public void mouseExited(MouseEvent event) { String string="鼠标离开了!"; fTextField.setText(string); } } }