- - PR -
インタフェースの型の継承について
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-06-17 21:34
Javaを勉強中です。
インタフェースについわからない点がありますので教えて下さい。 「通常の継承が“実装の継承”であるのに対して、 インタフェースは“型の継承”である。」 といった記述をよく目にしますが、型の継承とは どういう事なのでしょうか? また、そのような記事には以下のような携帯電話の実装で、 携帯電話クラスのインスタンスを実装したインタフェースの型で 使用する例があります。 使用出来るのは分かるのですが、このように使用する意味は何なのでしょうか? public class CellPhone extends Phone implements Camera, DisitalCash { // 電話の機能 public void call(int num) .. // 写真の機能 public void takePicture() .. // キャッシュ機能 public void pay(int money) .. public void charge(int money) .. } CellPhone celpho = new CellPhone(); Phone denwa = celpho; Camera kamera = celpho; よろしくお願いします。 [ メッセージ編集済み 編集者: hiro 編集日時 2008-06-18 05:35 ] | ||||||||||||
|
投稿日時: 2008-06-17 23:15
例えば、
というクラスがあったとした場合、
ということが出来ます。 携帯電話は電話機から派生していて、 WEBカメラはデジカメから派生しているとしても、 上記メソッドではカメラとして扱っています。 多態性と呼ばれるものです。 インターフェイスは実装を持たないので、 JDBCドライバのように、Sunが仕様だけを決め、 ベンダーがインターフェイスを実装したドライバを提供する、 というのもよくある使い方です。 以下はJDBCとは関係のない擬似コードですが、
というように、Connectionというインターフェイスが仕様として存在し、 その仕様を満たした各ベンダーの実装を利用している、というイメージです。 なんとなくインターフェイスの意味が伝わったでしょうか? | ||||||||||||
|
投稿日時: 2008-06-19 19:50
かつのりさん
ありがとうございます。 頂いた例ですと、良く分かりますね。 私が書いた例はあまり使われない、メリットがないのでしょうか? | ||||||||||||
|
投稿日時: 2008-06-19 22:54
メリットとは関係なしにモデリングを行うのはよく有ることです。
多態性を求めないオブジェクトであればインターフェイスは不要です。 ですが、後々の拡張性を考えれば、 インターフェイスを実装していると便利です。 私の例のように、インターフェイスを実装していれば、 そのコードの実装をどのように変えても、 利用する側のコードは変える必要がありません。 | ||||||||||||
|
投稿日時: 2008-06-20 12:48
「こう書くことができます」というのは機能を説明しているだけで目的がありませんから、メリットと感じなくて当然ですよ。
あえて書くならば「このように書けること」がメリットです。 | ||||||||||||
|
投稿日時: 2008-06-20 21:04
例が使えないように見えるのは、
プログラムつくる状況があまりないからですかねえ。 そのプログラムが必要になる状況と言うと。 あらゆる電子機器に使える汎用ライブラリでも作るか。 携帯電話が出てくるネットゲームでも作れば使えるかな? 使える局面なら便利だと思いますよ。 たとえば、ネットゲームで、CameraインターフェースのtakePictureメソッドを呼びだしてなにかできるような機能を作ったとします。 写真を撮って画面に表示した上に投稿するとか。 そうすればカメラその機能が使える上に、 その後、ゲームに機能が追加されて、携帯電話が出てきても、そのままその機能が使えます。 それどころか、カメラ付き車が出てこようがカメラ付きかつらが出てこようが、 元の機能を作った人が思いもよらなかったそのアイテムでも、 修正なしにその機能が使えるわけです。 |
1