俺様がJavaを極めてニートを脱出しようともがくスレ
■ このスレッドは過去ログ倉庫に格納されています
0648637
2006/05/05(金) 15:47:13> インターフェイスって、異なるクラスを同じクラスのように振舞えるような仕組みを提供するクラス。
> みたいな理解でいいんでしょうかね?
ほとんどの入門書にはそう書いてあるね。interface は継承の代用品、みたいなことも。
でも自分の感覚的にはちょっと違う。
それは後述。
abstract と interface はサブクラスに対し、固有のメソッドの実装を強制したい時に使う。
普通のクラスを継承した場合、メソッドをオーバーライドしないと親のメソッドをそのまま受け継いでしまうから。
戦略クラスの場合、「石取りゲームの戦略」という抽象的な役割を上位に置いて、具体的なロジックはそれぞれのクラスに「必ず」書かせたい。
親を普通のクラスニして、デフォルト動作を設定しても良いのだが、「子クラスでのメソッドの実装漏れ」が発生するリスク(メソッドの数が増えたらデバッグが大変)を考えればやりたくない。
そもそもデフォルト動作を用意する意味が無い。
で、abstract と interface の違いについて。
interface は振る舞いの規定のみを継承する、という入門書の解説は正直疑問。
どちらかと言うと、
1. クラスの継承は親クラスからコンストラクタ以外の何もかもを引き継ぐ。
2. 何もかもは嫌な場合も多々ある。そういう場合は interface を使う。
3. 結果として(外から見た)仕様=振る舞いを継ぐ格好になる。入門書の解説は結果論。
という感じがする。
クラスの継承は真の親子(容姿やら財産やらひっくるめて、宿命を受け継ぐ)のに対し、interface は先輩後輩、先生と弟子(能力だけ受け継ぐ)、という感じがする。
例えになっているかは分からないが…。
Thread クラスと Runnable インターフェイスの関係と使われ方を見るとそう思う。
■ このスレッドは過去ログ倉庫に格納されています