内部类

概念:JDK1.1以上版本都支持一个类作为其他类的成员,既可以在语句块中局部定义,也可以在表达式中匿名定义:

内部类具有如下属性:

  1. 类名只能在定义的方位类被使用,内部类的名称必须区别于外部类;
  2. 内部类可以使用外部类的类变量和实例变量,亦可以使用外部类的局部 变量;
  3. 内部类可以定义为abstract类型;
  4. 内部类可以是一个接口,这个接口必须由另外一个内部类来实现;
  5. 内部类可以被定义为private或者protected类型,当一个类中嵌套另一个类时,访问保护并不妨碍内部类使用外部类的成员;
  6. 被定义为static的内部类将自动转换为顶层类,它们不能再使用局部范围中或其它内部类中的数据和变量;
  7. 内部类中不能定义static型成员,而只有顶层类才能定义static型成员。 如果内部类需要使用static型成员,这个成员必须在外部类中加以定义。

举个栗子:

public class TwoListenInner {
    private Frame f;
    private TextField tf;
    public static void main(String[] args){
        TwoListenInner that = new TwoListenInner();
        that.go();
    }

    private 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,200);
        f.setVisible(true);
    }
    //MouseMotionHandler为一个内部类
    public class MouseMotionHandler extends MouseMotionAdapter{
        @Override
        public void mouseDragged(MouseEvent e) {
            String s = "Mouse dragging: X = "+e.getX()+"Y = "+e.getY();
            tf.setText(s);
        }
    }
    //MouseEventHandler为一个内部类
    public class MouseEventHandler extends MouseAdapter{
        @Override
        public void mouseEntered(MouseEvent e) {
            String s = "The mouse entered";
            tf.setText(s);
        }

        @Override
        public void mouseExited(MouseEvent e) {
            String s = "The mouse has left the building";
            tf.setText(s);
        }
    }
}

程序执行结果如下所示:
这里写图片描述
这里写图片描述
这里写图片描述

匿名类
在定义一个内部类时,也可以将整个类的描述包含在一个表达式的范围里,使用这种方法是在定义了一个匿名类的同时创建了一个对象。例如:

f.addMouseMotionListener(new MouseMotionAdapter() {
    @Override
    public void mouseDragged(MouseEvent e) {
        String s = "Mouse dragging: X =      
        "+e.getX()+"Y = "+e.getY();
        tf.setText(s);
    }
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值