- PR -

インターフェースの実装について

1
投稿者投稿内容
がお
会議室デビュー日: 2005/12/02
投稿数: 17
投稿日時: 2005-12-02 08:23
はじめまして。

インターフェースについての素朴な疑問なのですが、
参考書等には、インターフェースを実装したクラス内で、
インターフェースで定義されているメソッドのコードを記述するような事が
書かれているのですが、
Serializable インターフェースについては、
実装した側で特に何もコードを記述していません。
これはどういう事なのでしょうか?

[ メッセージ編集済み 編集者: がお 編集日時 2005-12-02 23:32 ]
米山@クロノス
大ベテラン
会議室デビュー日: 2003/06/10
投稿数: 103
お住まい・勤務地: 大阪市淀川区西中島4-13-22 新大阪淀川ビル5F
投稿日時: 2005-12-02 08:53
こんにちは、かおさん。
米山@クロノスです。

Serializableのようなインターフェイスは「マーカー・インターフェイス」と呼ばれ、実装したクラスが「〜可能である」ということを表すためのものです。
例えば、Serializableインターフェイスの場合は、implementsしたクラスが「直列可能である」ということを実行環境に教えるためだけの役割を持っています。
そのため、実装が必要なメソッドは定義されていません。

このようなインターフェイスは名前の後ろが「〜able」となっており、他にもCloneableインターフェイスが有名ですね。

※ 全ての「〜able」インターフェイスが「マーカーインターフェイス」であるとは限りませんが。


がお
会議室デビュー日: 2005/12/02
投稿数: 17
投稿日時: 2005-12-02 11:14
米山さん回答ありがとうございました。
インターフェースについて何か特別な実装方法があるのかと、
今まで疑問に思っていたところでした。
ちなみにこのような使い方は、開発者サイドでは行なえないですよね。
c9katayama
常連さん
会議室デビュー日: 2003/02/04
投稿数: 38
投稿日時: 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のインターフェースの
ついたオブジェクトの数を数えたりできます。
Take-C
常連さん
会議室デビュー日: 2002/05/09
投稿数: 23
投稿日時: 2005-12-02 14:49
マーカーインタフェースは私もよく作成して使っていました。
ただJ2SE5.0から導入されたアノテーションによって、マーカーインタフェースの役割は終わりそうですね。
インタフェースは本来の役割である「インタフェースの定義」に専念することになりそうです
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-12-02 23:00
例えばSerializableを実装したクラスがあったとして、
それを直列化するメソッドを作る場合、
コード:
public byte[] serialize(Serializable obj)


というような書き方が可能です。
コード:
public byte[] serialize(Object obj)


でもいいのですが、前者の方がわかりやすいです。
Clonable等も同じ事が言えるのではないでしょうか。
1

スキルアップ/キャリアアップ(JOB@IT)