インタフェース は、ある機能を実現するクラスが必ず実装するべきメソッドの名前や型といった作法のみを定義するものです。interface を用いて定義します。インタフェースで定義されるメソッド(抽象メソッド)の実体は implements を用いた側のクラスで実装しなくてはなりません。
interface インタフェース名 { : }
下記は ActionListener インタフェースの実際の定義例です。EventListener インタフェースを継承しています。インタフェース内で定義されるメソッドには、暗黙的に abstract 宣言と public 宣言がつけられます。
public interface ActionListener extends EventListener { public void actionPerformed(ActionEvent e); }
インタフェースを 実装 するには、implements を用いて下記のように定義します。インタフェース名は、カンマ(,)で区切って複数指定することができます。implements を用いた場合、インタフェース名で指定された抽象メソッドを実装することが義務付けられます。
class クラス名 implements インタフェース名 { : }
インタフェースの具体例を見てみましょう。InterfaceA はテスト用のインタフェースです。メソッド methodA() と methodB() の名前や型のみを定義しています。クラス ClassA は InterfaceA を実装すると宣言しているため、methodA() や methodB() を正確に実装しなくてはなりません。この実装を行う際のプログラミングミスをチェックするのが、インタフェースの役目です。
interface InterfaceA { public void methodA(String msg); public void methodB(int arg); } class Test implements InterfaceA { public void methodA(String msg) { System.out.println(msg); } public void methodB(int arg) { System.out.println(arg); } } public class Main { public static void main(String[] args) { Test o = new Test(); o.methodA("ABC"); o.methodB(123); } }
インタフェースの修飾子には、public、abstract、strictfp を指定することができます。
修飾子 interface インタフェース名 { : }
インタフェースをクラス内に定義する場合には protected、private、static を指定することも可能になります。
class クラス名 { 修飾子 interface インタフェース名 { : } }
親インタフェースの定義を継承するには extends を用います。
interface インタフェース名 extends 親インタフェース名 { : }