- - PR -
インターフェースの実装について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-12-02 08:23
はじめまして。
インターフェースについての素朴な疑問なのですが、 参考書等には、インターフェースを実装したクラス内で、 インターフェースで定義されているメソッドのコードを記述するような事が 書かれているのですが、 Serializable インターフェースについては、 実装した側で特に何もコードを記述していません。 これはどういう事なのでしょうか? [ メッセージ編集済み 編集者: がお 編集日時 2005-12-02 23:32 ] | ||||||||
|
投稿日時: 2005-12-02 08:53
こんにちは、かおさん。
米山@クロノスです。 Serializableのようなインターフェイスは「マーカー・インターフェイス」と呼ばれ、実装したクラスが「〜可能である」ということを表すためのものです。 例えば、Serializableインターフェイスの場合は、implementsしたクラスが「直列可能である」ということを実行環境に教えるためだけの役割を持っています。 そのため、実装が必要なメソッドは定義されていません。 このようなインターフェイスは名前の後ろが「〜able」となっており、他にもCloneableインターフェイスが有名ですね。 ※ 全ての「〜able」インターフェイスが「マーカーインターフェイス」であるとは限りませんが。 | ||||||||
|
投稿日時: 2005-12-02 11:14
米山さん回答ありがとうございました。
インターフェースについて何か特別な実装方法があるのかと、 今まで疑問に思っていたところでした。 ちなみにこのような使い方は、開発者サイドでは行なえないですよね。 | ||||||||
|
投稿日時: 2005-12-02 11:34
こんにちは。
マーカーインターフェースは、開発者でも使用できますよ。 たとえば public intarface HogeMark{ } という、中身が空のインターフェース(マーカーインターフェース)を つくります。 その後に、このインターフェースをつけたクラスを作ります。 //マーカーあり public class Hoge implements HogeMark{ //適当に実装 } //マーカーなし public class NoHoge{ //適当に実装 } インターフェース定義に何もないので、実装クラスは 特にすることはありません。 そのあとに、たとえば public static int hogeCount(Object[] objArray){ int count = 0; for(int i = 0;i < objArray.length;i++){ if(objArray[i] instanceof HogeMark){ count++; } } } というメソッドに対して、HogeとNoHogeが入った配列 (new Object[]{new Hoge(),new NoHoge()}、とか) を渡すと、その配列中のHogeMarkのインターフェースの ついたオブジェクトの数を数えたりできます。 | ||||||||
|
投稿日時: 2005-12-02 14:49
マーカーインタフェースは私もよく作成して使っていました。
ただJ2SE5.0から導入されたアノテーションによって、マーカーインタフェースの役割は終わりそうですね。 インタフェースは本来の役割である「インタフェースの定義」に専念することになりそうです | ||||||||
|
投稿日時: 2005-12-02 23:00
例えばSerializableを実装したクラスがあったとして、
それを直列化するメソッドを作る場合、
というような書き方が可能です。
でもいいのですが、前者の方がわかりやすいです。 Clonable等も同じ事が言えるのではないでしょうか。 |
1