Java内部类

1、先看一下Java核心技术卷的介绍

内部类(inner class)是定义在另一个类中的类。为什么需要使用内部类呢?其主要原因有以下三点:

● 内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据。

● 内部类可以对同一个包中的其他类隐藏起来。

● 当想要定义一个回调函数且不想编写大量代码时,使用匿名(anonymous)内部类比较便捷。

2、使用内部类访问对象状态

内部类的语法比较复杂。鉴于此情况,我们选择一个简单但不太实用的例子说明内部类的使用方式。下面将进一步分析TimerTest示例,并抽象出一个TalkingClock类。构造一个语音时钟时需要提供两个参数:发布通告的间隔和开关铃声的标志。

import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener;

public class TalkingClock{
    private int interval;
    private boolean beep;

    public TalkingClock(int interval, boolean beep) {
        this.interval = interval;
        this.beep = beep;
    }

    public void start(){

    }

    public class TimePrinter implements AncestorListener{

        @Override
        public void ancestorAdded(AncestorEvent event) {
            // TODO Auto-generated method stub
            throw new UnsupportedOperationException("Unimplemented method 'ancestorAdded'");
        }

        @Override
        public void ancestorRemoved(AncestorEvent event) {
            // TODO Auto-generated method stub
            throw new UnsupportedOperationException("Unimplemented method 'ancestorRemoved'");
        }

        @Override
        public void ancestorMoved(AncestorEvent event) {
            // TODO Auto-generated method stub
            throw new UnsupportedOperationException("Unimplemented method 'ancestorMoved'");
        }
        
    }

}

需要注意,这里的TimePrinter类位于TalkingClock类内部。这并不意味着每个TalkingClock都有一个TimePrinter实例域。如前所示,TimePrinter对象是由TalkingClock类的方法构造。下面是TimePrinter类的详细内容。需要注意一点,actionPerformed方法在发出铃声之前检查了beep标志。

posted @ 2023-04-14 11:34  致非  阅读(20)  评论(0)    收藏  举报