![]() ![]() ![]() ![]() | オブジェクト、クラス、インタフェース |
インタフェースを作成するためには、インタフェース宣言とインタフェース本体の両方を書かなくてはならない。interfaceDeclaration は名前や別のインタフェースを拡張するかどうかなど、インタフェースについて種々の属性を宣言する。 interfaceBody は定数とインタフェース内のメソッド宣言を含む。interfaceDeclaration { interfaceBody }インタフェース宣言
最低限、インタフェース宣言は Java のキーワードinterface
と現在作成しているインタフェース名を含む。注釈: 規約により、インタフェース名はクラス名と同じように、大文字から始まる。 しばしば、インタフェース名は "able" あるいは "ible" で終わる。interface Countable { . . . }インタフェース宣言は、
public
アクセス指示子と「 superinterfaces 」のリストの2つの構成要素を持つことができる。 クラスが拡張、あるいは別のクラスをサブクラス化することができるように、インタフェースは他のインタフェースを拡張することができる。 しかし、クラスが1つのクラスだけを拡張することができるのに対して、インタフェースは多くのインタフェースを拡張することができる。 したがって、インタフェース宣言全体は次のようになる。[public] interface InterfaceName [extends listOfSuperInterfaces] { . . . }注釈:前のリリースの Java 環境ではインタフェース宣言に
abstract
修飾子もサポートした。 しかし、インタフェースは暗黙に抽象的なので、これは不必要である(インタフェース内で宣言するメソッドのいずれも実装を持っていない)。 もはやインタフェース宣言でabstract
使用する必要はない。
public
アクセス指示子は、インタフェースが任意のパッケージのどんなクラスでも使用されることができることを表す。 インタフェースがpublicであることを明示しないなら、インタフェースはインタフェースと同じパッケージで定義されるクラスにアクセス可能なだけである。
extends
節はクラス宣言のextends
節に類似している。しかし、インタフェースは複数のインタフェースを拡張することができるが(クラスは1つしか拡張できない)、インタフェースはクラスを拡張することができない。 superinterfaces のリストは、新規のインタフェースにより拡張されるすべてのインタフェースをコンマで区切って一覧する。インタフェースが同一名の別のインタフェースで定数を隠すか、あるいは新規のメソッド宣言でメソッドをオーバーライドしないならば、インタフェースはその superinterface からすべての定数とメソッドを継承する。
インタフェース本体
インタフェース本体はインタフェース内で定義されたメソッドのメソッド宣言を含む。 メソッドの実装 では、メソッド宣言の書き方について説明する。 メソッド宣言加えて、インタフェースは定数の宣言を含むことができる。 メンバ変数宣言の作成方法についてはメンバ変数の宣言 を参照のこと。しかし、インタフェースでのメンバ宣言では、いくつかの宣言修飾子を使用することができず、その他の使用も思いとどまらせることになるので注意すること。 インタフェースのメンバ宣言では
transient
、volatile
、synchronized
を使用しないほうがよい。 同じく、インタフェースのメンバを宣言する時は、private
とprotected
指示子も使用しないほうがよい。インタフェースで定義されるすべての定数値は暗黙に public 、static、および final である。 インタフェースでの定数宣言におけるこれらの修飾子の使用は、書式の問題としてすすめられない。 インタフェースで宣言するすべてのメソッドが暗黙に public およびabstract である。 インタフェースのメソッド宣言におけるこれらの修飾子の使用は、書式の問題としてすすめられない。
次のコードでは、1つの定数値と3つのメソッド宣言を含む Collection という新規インタフェースを定義する。
Collection インタフェースはスタック、ベクトル、リンクリストなどのような他のオブジェクトのコレクションを表すクラスにより実装することができる。interface Collection { int MAXIMUM = 500; void add(Object obj); void delete(Object obj); Object find(Object obj); int currentCount(); }インタフェースはその内で宣言するメソッドの実装を提供しないので、各メソッド宣言はセミコロン (;) で続くので注意すること。
注釈:前のリリースの Java 環境ではメソッド宣言に
abstract
修飾子が使用できた。 しかし、メソッドは暗黙に抽象的なので、これは不必要である(インタフェース内で宣言するメソッドのいずれも実装を持っていない)。 もはやメソッド宣言でabstract
使用する必要はない。
![]() ![]() ![]() ![]() | オブジェクト、クラス、インタフェース |