• ベストアンサー

インターフェイスは何故必要か

 Javaの初心者です、宜しくお願いします。  Javaには継承という仕組みがあるのに何故インターフェイスという 仕組みが必要なのでしょうか。  勿論、2個の親クラスからの継承を嫌ったのはなんとなく理解出来るのですが それなら子クラスでインターフェイスの機能を別途作ってやれば、わざわざイン ターフェイスという仕組みを考える必要がないと思うのですが。  親クラス、子、孫、またその孫としてやり、そのどれかのクラスに インターフェイスの機能を持たせれば良いだけと考えるのですが。  インターフェイスのメッソドを全て実装する必要とかもなくなると思うのですが。  以上宜しくお願いします。

  • Java
  • 回答数4
  • ありがとう数1

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

  • ベストアンサー
  • anyhelp
  • ベストアンサー率43% (79/180)
回答No.4

あなたの言う通り、もしもインターフェースが仕様に無い言語(考える必要のない言語)の場合では、実装のない抽象的な扱いを前提としてクラスで代用する事もできます。この場合、シグネチャー通りに正しく子クラスで実装をしなければなりません。人間が正しく操作を行う事が前提となります。インターフェースがあれば実装がされていなければ未実装である事を機械が人間にエラーという形で伝えます。理論はともかくこの利点はあります。 インターフェースは和訳の通り名前の通り接続面を表す言葉です。クラス同士で接続(通信)する場合には、互いに正しく呼び出す関数(メソッド)のシグネチャー(面)を知っていることが必要になります。逆に考えればそれさえ分かれば正しく接続出来るという事です。 たとえば、インターフェースにメソッドが20個定義があるが、実際2つしか使っていないという事もあり得ますね。わざわざ残りの使いもしない18個も実装しないといけないのはうっとうしいという考えも分かります。というのも言語によってはインターフェースに該当する定義の段階で実装を必須かどうかを選べる言語もあるからです。JavaにおいてJavaの言語ルールで書かざる得ないと思いますが、様々言語をやると利点欠点を知るキッカケになると思います。普及している言語だからと全てが優れているとは限らないのでそういう視点は良いと思いますね。

その他の回答 (3)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

では、次のプログラムで、 interface IA → class IA (IB,ICも同様)にして、継承だけを使って書き換えてください。 methodXXのERROR,OKはこれと同じになるようにしてください。 とても面倒になるのでは? これがID,IEと増えたらもっと複雑になります。 複数インターフェースが同列に並んでいるからこそ、便利なことがあります。 interface IA { void a(); } interface IB { void b(); } interface IC { void c(); } class ImplAB implements IA,IB { public void a() {}; public void b() {}; } class ImplAC implements IA,IC { public void a() {}; public void c() {}; } class ImplBC implements IB,IC { public void b() {}; public void c() {}; } class ImplABC implements IA,IB,IC { public void a() {}; public void b() {}; public void c() {}; } public class C2 { static <T extends IA&IB> void methodAB(T x) {x.a();x.b();} static <T extends IB&IC> void methodBC(T x) {x.b();x.c();} static <T extends IA&IC> void methodAC(T x) {x.a();x.c();} static <T extends IA&IB&IC> void methodABC(T x) {x.a();x.b();x.c();} public static void main(String[] args) { ImplAB objAB = new ImplAB(); ImplBC objBC = new ImplBC(); ImplAC objAC = new ImplAC(); ImplABC objABC = new ImplABC(); methodAB(objAB); // OK methodBC(objAB); // ERROR methodAC(objAB); // ERROR methodABC(objAB); // ERROR methodAB(objBC); // ERROR methodBC(objBC); // OK methodAC(objBC); // ERROR methodABC(objBC); // ERROR methodAB(objAC); // ERROR methodBC(objAC); // ERROR methodAC(objAC); // OK methodABC(objAC); // ERROR methodAB(objABC); // OK methodBC(objABC); // OK methodAC(objABC); // OK methodABC(objABC); // OK } }

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.2

静的型言語でポリモルフィズムを実現するために必要です。 ポリモルフィズム(ポリモーフィズム)についてご存じなければ勉強してください。 Rubyのようにコンパイル時にメソッドの有無をチェックしない言語だとインターフェースなどいらないのですが、コンパイル時にチェックしようとするとどうしても必要です。 べつの言い方をすると、ポリモルフィズムを実現した上で、実行時に「メソッドなしエラー」を出さないために必要。

  • OKWavex
  • ベストアンサー率22% (1222/5383)
回答No.1

いらないならひつようないよ

関連するQ&A

  • フレームワークによくあるインターフェースについて

    たとえばSpringだとInitializingBeanインターフェースを 実装してafterPropertiesSetメソッドに処理を書くことによって Beanを初期化したときにその処理が実行されるようですが、 これはどのような仕組みでそのインターフェースを実装しているか どうかを判断しているのでしょうか? getInterfacesメソッドを使うとそのクラスが実装している インターフェースを調べることができるようですが、 これは親クラスのインターフェースまでは調べられないようですし、 フレームワークはどのようにしてそのクラスが実装している インターフェイスを判定しているのか不思議です。

    • ベストアンサー
    • Java
  • interfaceを実装するとは?

    interfaceを実装するとはどういうことですか? abstractはクラスの継承で 学校 -abstract(拡張)― 教室 ―abstract(拡張)― 生徒 と機能を細分化するものとわかりました。 インターフェースってなんですか・・

  • Observerインターフェイスについて

    Javaを勉強中の者です。宜しくお願いします。 JavaのAPIの中で、Observerはインタフェースとなっています。Observerが普通のクラスではなくてインターフェイスとなっているのはなぜなのでしょうか? インターフェイスだと、複数の継承が可能になるからでしょうか?でももしそうなら、あるクラスAがObserverだけを継承している場合は、複数継承ではないので、Observerをインターフェイスにする必要がなくなりますよね。。という事は、他にもこのObserverをインターフェイスにする利点(理由)があるのでしょうか? どなたかご教授をお願いします。 Observerについては、下記のサイトを参考にしました(http://www.fuka.info.waseda.ac.jp/~washi/m_html/node12.html#observer)

    • ベストアンサー
    • Java
  • アブストラクトとインターフェースの簡単な一例文

    JAVAについて質問よろしくお願いします。 abstract抽象クラスとインターフェースについて下記理解なのですが、超かんたんな一例など欲しいのですが何かないでしょうか。たとえば package round1.chapter1; public class Helloworld { public static void main(String[] args) { System.out.println("こんにちは!"); } } というような一文です。 ~私の理解~ アブストラクトとは、違ったクラス内で同一メソッドがある場合は親クラスに置き、違ったメソッドがある場合は抽象クラスとして親クラスに置いて、実装はサブクラスに任せるという形式で使われる言葉 インターフェースとは、機能だけを仕様書として書いておき、定義されたとおりのメソッドを実装しないといけないという呼び出し方の統一を図る際に使われるメソッド置き場 ~~~~~ このふたつについてものすごく簡単な使用例を頂きたいです。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • interface,extend,implementのちがい

    お世話になります、 Javaを勉強しているのですが、 interface,extend,implementの使い分けがわかりません。 私の解釈としては、 (1)interfaceは、グローバル変数の定義、グローバルメソッドの定義(実装はしない)。 (2)extendは、extendクラスを親クラスとして親クラスの機能を使用できる。 (3)implementは…,implementもextendと同じような意味だと解釈しているんですが、違う点は、implementで定義してあるメソッドは、使用しなくても、実装しなければならないという点でしょうか? とにかくこの3つのを使い分けるコツとかあれば教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • インターフェイスの使い方がわかりません(初心者です)

    Javaを始めたばかりの初心者です。 「やさしいJava」を買って一通り学んだのですが、 インターフェイスの使い方がよくわからず、困っています。 インターフェイスを実装することでインターフェイスが持つメソッドがすべて定義されてることが保障される、 というのはわかるんですが、そのことがどうして有用なのでしょう? また、具体的にはスレッドを扱うときにRunnableインターフェイスを実装する理由がわかりません。 Threadクラスのオブジェクトを作成するときに、 Runnableを実装したクラスのオブジェクトの変数を 引数にしないといけないんですよね? このとき、Runnableインターフェイスが 「runメソッドが定義されていなければならない」 とだけいうものだったとしたら、 Runnableを実装してなくてもrunメソッドさえ定義してあれば 実行できそうな気がするんですが・・・

    • ベストアンサー
    • Java
  • RubyでJavaのInterfaceに相当するものはありますか?

    RubyでJavaのInterfaceに相当するものはありますか? Ruby 上で Javaの interface のようなものものを実現するには、どうしたらよ いのでしょうか? Rubyは型を宣言しないので機能的には interface は不要ですが。 クラスを実装する人に、あるクラスに実装しなければいけないメソッドを伝える (強制する)目的としての interface 的な使い方をしたいのです。 宜しくお願いいたします。

  • インタフェース、クラスの継承、コンストラクタ意味

    Javaを学習している初心者です。 インタフェース、コンストラクタ、クラスの継承について、 必要な理由が、イマイチよく分かりません。 特に設定しなくても、プログラムは動くと思うのですが・・・ (特にインタフェース) 詳しい方、教えて下さい。

    • ベストアンサー
    • Java
  • interface

    javaを勉強中ですが、interfaceで分からなくなっています。 いったいこれは、どのような状況でつかうのでしょうか。 どういった利点があるのか分かりません。 interfaceを宣言しないで必要なときに実装するのではなにか不都合があるのでしょうか。 よろしくご教授下さい。

    • ベストアンサー
    • Java
  • ADODB.Connectionはインターフェイス

    いつもお世話になっております。 C#で特定のDBに接続するクラスを作ろうとADODB.Connection(ADO.Conn)を継承しようとしたところADO.Connはインターフェイスであるため、各メンバの実装をしなくてはなりません。ADO.Connはオブジェクトととしてインスタンスを生成できていたため、なぜインターフェイスがインスタンスを生成してオブジェクトとして使えるのかがわかりません(Excel.Applicationなども同様です)。 これはどのような仕組みになっているのでしょうか?

専門家に質問してみよう