在Java程序设计中,接口(interface)不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义。
接口中的所有方法自动地属于public,在接口中申明方法时,不必提供关键字public。
接口中绝不能含有实例域,也不能在接口中实现方法。提供实例域和方法的任务应该由实现接口的那个类来完成。
为了让类实现一个接口,通常需要两个步骤:
(1)将类申明为实现给定的接口。
(2)对接口中的所有方法进行定义。
要将类声明为实现某个接口,需要使用关键字implements
例如:假如程序中有一个时钟,就可以请求每秒获取一个通知,以便更新时钟的画面。
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); }
内部类(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 } } }