• ベストアンサー

(初歩)インターフェイスの必要性がわかりません

お世話になります。 初歩的な質問で申し訳ないのですが、 抽象クラスの事がわからず、使用する意味が分かりません。 自転車、車、飛行機といったクラスがあるとして、 interface Speed { Speed(); } といった物があるとして、 関数名を統一するために使うのかなと思ったのですが、 結局処理を書くのだから、長くなるだけと思ってしまいます。 実際は、どのような場合に使われているのでしょうか? 分かる方がいましたら教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1416)
回答No.2

類似しているが微妙に異なるデータモデルがあるとします。 例えば、会社組織で考えると、部、課までは同じで、それ以下の 呼び名が違うプロジェクトチームがあったとします。 でも、どのチームも部名と課名はあります。このような場合、 各チームは(クラスが)異なっても部と課という項目は最低限、用意 する(されている)というのがInterfaceです。 実業務としてはデータベースのテーブル情報の入れ物でよく見ます。 決まりとして、どのテーブルも、キー、更新者名、更新日時は持つ ように設計されていることが多く、これらのゲッターがinterfaceに なっていたりします。 個人的には抽象クラスの方が好きです。規定の手続きが書けますから。

qqtaka
質問者

補足

アドバイスありがとうございます。 なるほどですね。使える人が使うには便利そうですね。 それぞれの部、課のインターフェイスがあれば、 それを継承して使っていくのですかね。 なんとなくですが実用的なイメージがつかめてきたと思います。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「関数名を統一する」というのはおそらく表面的な話. 「クラスの継承関係によらないメソッドの継承」あるいは「クラスの継承とは無関係に, 特定の機能を持つというマークができること」が重要だと思います (もちろんその過程で自動的に関数名は統一されますが, それは「結果」). 言いかえれば「多重継承は面倒だから入れたくないけど多重継承的な何かは便利だから入れたい」という葛藤の末にできたともいえるでしょう. 実際, 多重継承ができる C++ では class/interface という 2本立てではなく class だけですし.

qqtaka
質問者

補足

アドバイスありがとうございます。 引数や返り値まで決めることができるのですね。 なんだか、フォーマットみたいなものと考えると便利だと感じました。 自分には、C++の多重継承は緻密さが必要で後戻りが面倒で出来ない、 Javaのインターフェースはやり過ごしの処理なのかなと思いました。 考えてみたのですが、extendsとは別に、継承したクラスで効力が切れる多重一時継承のようなものはありますでしょうか? そういうのがあれば、自分のプログラムでも少しは纏められるのではと思いました。 どちらにしても、継承を考えていくのは想像があまりつきません。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A