1.接口
在Java程序设计中,接口(interface)不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义。
接口中的所有方法自动地属于public,在接口中申明方法时,不必提供关键字public。
接口中绝不能含有实例域,也不能在接口中实现方法。提供实例域和方法的任务应该由实现接口的那个类来完成。
为了让类实现一个接口,通常需要两个步骤:
(1)将类申明为实现给定的接口。
(2)对接口中的所有方法进行定义。
要将类声明为实现某个接口,需要使用关键字implements
2.接口与回调
例如:假如程序中有一个时钟,就可以请求每秒获取一个通知,以便更新时钟的画面。
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.JOptionPane;
import javax.swing.Timer;
public class CallBackTest {
public static void main(String[] args) {
ActionListener listener = new TimerPrinter();
Timer t = new Timer(1000, listener);
t.start();
JOptionPane.showMessageDialog(null, "Quit program");
System.exit(0);
}
}
class TimerPrinter implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
Date now = new Date();
System.out.println("At the tone,the time is " + now);
Toolkit.getDefaultToolkit().beep();
}
}
接口:
public interface ActionListener{
void actionPerformed(ActionEven event);
}
当达到指定时间间隔时,定时器就调用actionPerformed方法。然后定义一个实现ActionListener接口的类,将执行的语句放在actionPerformed方法中。
2.内部类
内部类(inner class)是定义在另一个类中的类。使用内部类的原因有三点:
(1)内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。
(2)内部类可以对同一个包中的其他类隐藏起来。
(3)当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。
局部内部类
匿名内部类
public void start(int interval,final boolean deep){
ActionListener listener = new ActionListener(){
public void actionPerformed(ActionEvent event){
Date now = new Date();
more code
}
}
}
它的含义:创建一个实现ActionListener接口的类的新对象,需要实现的方法actionPerformed定义在括号{ }中。