- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

はじめに Edit

Javaの基本的なプログラミング単位はクラス(class)
オブジェクト指向の基本的単位は、型(type)
インタフェースは、抽象的な形式で型を定義できる。
またインタフェースは、インスタンス化できない。
クラスは、インタフェースを実装することで拡張できる。

クラスは、1つ以上のインタフェースを実装できる。
Javaは、多重継承はできず、単一継承しかできないが、
インタフェースは複数実装できる。

拡張しているクラス、インタフェースをスーパータイプと呼ぶ。
拡張している側はサブタイプと呼ぶ。

4.1 簡単なインタフェースの例 Edit

何が「できる」かで、インタフェース宣言される場合が多い。
以下は、標準パッケージの例

  • Cloneable 複製できる
  • Comparable 比較できる
  • Runnable 独立したスレッドで実行できる
  • Serializable シリアライズできる

インタフェースは、interfaceを使って宣言する。
Comparablの例では、
相互に比較可能でない場合、ClassCastExceptionが投げられる。

実装は、クラス本体の宣言前にimplementsを使って行う。
リストされたインターフェースは、スーパーインタフェースである。
全てのメソッドを実装しない場合、クラスはabstractとせねばならない。

インタフェースの強力な点は、
インタフェース型の変数を宣言して利用できる点にある。
(何のクラスかに関係なく利用できる)

4.2 インタフェース宣言 Edit

インタフェース宣言は、interfaceを用いて、名前を書き、中括弧{}の間にメンバーをリストすることができる。

以下の3種類のメンバーを宣言できる。

  • 定数
  • メソッド
  • ネストしたクラスとインタフェース

メンバーは、暗黙にpublic宣言される。

4.2.1 インタフェース定数 Edit

暗黙に定数は、public static finalになる。
初期化子は必須。ブランクfinal(代入のないfinal変数宣言)は許されない。

4.2.2 インタフェースメソッド Edit

暗黙にメソッドは、abstractになる。
他の修飾子はつけられない。

4.2.3 インタフェース修飾子 Edit

インタフェース宣言の前に修飾子をつけることができる。

  • public 誰からでもアクセス可能
  • abstract 暗黙にabstract
  • strict浮動小数点

4.3 インタフェースの拡張 Edit

インタフェースは、extendsを利用して、拡張できる。
1つ以上のインタフェースを拡張できる(クラスは1つのみ)
つまり、インタフェースは、多重継承をサポートしている。

4.3.1 定数の継承と隠蔽 Edit

拡張したインタフェースは、スーパーインタフェースで宣言されている定数を全て継承する。
同じ名前の定数が宣言されている場合は、隠蔽(上書き)される。

スーパーインタフェースの定数にアクセスする場合は、
インスタンスのスーパーインタフェースへのキャストをすることで利用できる。

定義が曖昧な場合は、コンパイルエラーとなる。
曖昧な場合とは、例えば、インタフェースA,Bで同名の定数valを定義していた場合、
A,Bを両方拡張したインタフェースCを定義した場合。

4.3.2 メソッドの継承、オーバーライド、オーバーロード Edit

サブインターフェースは、同じシグニチャだとオーバーライドする。

複数の異なるインタフェースを拡張する場合、実現不可能な場合がある。

例のように同じ名前のメソッドを拡張したインタフェースは、
満足のいく実装ができないと思われる。

4.4 インタフェースを使用する Edit

例では、4つのメソッドを持つ、Attributedインタフェースを作成している。

4.4.1 インタフェースを実装する Edit

例では、HashMapクラスを使用したAttributedの実装例を示している。
attrs()は、イテレータを返す点に注意。

4.4.2 実装を使用する Edit




Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2005-09-26 Mon 18:18:07 JST (5436d)