• 締切済み

interfaceを実装するとは?

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

  • Java
  • 回答数3
  • ありがとう数3

みんなの回答

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

>AppletContextインターフェースにあるgetAudioClipメソッドを使うにはどうすればいいですか 例えば、AppletクラスのgetAppletContextメソッドで取得できます。 class myClass extends Applet {   public void aaa() {     AppletContext x = getAppletContext();     URL u = new URL("~");     AudioClip c = x.getAudioClip(u); 変数xにはあるクラスのインスタンスが代入されます。このクラスの 名前はAppletContextではありませんが、AppletContextを実装する ので、getAudioClip()メソッドを持っています(いなければならない)。 インターフェース、抽象クラスなどの考え方は一度、分かっている 人に徹底的に教えてもらったほうが良いでしょう。文章だと、理解 するのが、結構大変です。(説明する方も難しい)

rescue99
質問者

お礼

ありがとうございます。 独学なので、教えてくれる人がいないんです。 1冊の本を読んでも理解できないので、いろいろな本を読んで少しずつ理解していってる状態です。 回答を教えていただきありがとうございます。 URL u = new URL("~"); AudioClip c = x.getAudioClip(u); 引数はインスタンスしてないとダメなんでしょうか・・ インスタンス.メソッドの引数がインスタンス・・・理解できません・・・ 想像以上にむずかしいです。 簡単なソフトを作るレベルでも相当だと感じます。 自分が頭が悪すぎるんでしょうか。。。あまりに理解できなさすぎて萎えます。。

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

abstract は抽象クラスや抽象メソッドに付ける修飾語で、「継承」 ではありません。抽象クラスもインターフェースも似たような使い 方ををしますが、「実装」する場合、抽象クラスはextendsしますが、 インターフェースはimplementsします。 例えば、「学校」というインターフェースには「教室」、「生徒」 というメソッドがあるとします。 現実の学校、例えば、私立○○中学高等学校が「学校」という インターフェースを持つためには必ず「教室」、「生徒」という メソッドを持つ必要があります。これらのメソッドは何らかの 具体的な処置が記述されます。この「具体的な処理を記述する」が 「実装」にあたります。 一方、抽象クラスは規定の処理を記述できるので、特に変更する 必要が無ければ、継承したクラスではメソッドを持たなくてもよい のです。但し、継承なので複数のクラスを継承できません。 これに対し、インターフェースは複数指定が可能です。 例えば、「私立」というインターフェースがあり、「理事長」という メソッドがあるとすると、私立○○中学高等学校は「学校」と、「私立」 という二つのインターフェースを実装することができます。 区立第1中学は公立なので、理事長がいないため、「学校」という インターフェースしか実装できない、といった具合です。 あるメソッドが「学校」というインターフェースをパラメータに する時、これを実装する私立○○中学高等学校も区立第1中学も パラメータに指定することができます。 類似したクラスが多数作られ、共通処理が幾つも予想される場合、 共通項目を集めてインターフェース、あるいは抽象クラスとする のが普通です。どちらを使うかは「状況による」としか言えません。

rescue99
質問者

お礼

ありがとうございます。 たとえば、Java Platform Standard Ed.6にあるjava.appletパッケージを使うとします。 そこにはAppletContextインターフェースとgetAudioClipクラスがあります。 AppletContextインターフェースにあるgetAudioClipメソッドを使うにはどうすればいいですか? AudioClip getAudioClip(URL url) パラメータ:url-オーディオクリップの位置を示す絶対URL 戻り値:指定されたURLにあるオーディオクリップ ライブラリ一覧の説明を見ても使い方がわからないので途方にくれています。 ――――――――――――――――――――――――――――――――――――― インターフェイスだけだと機能しないので、なんらかのメソッドを記載することをインターフェイスを実装するという。 インターフェイスは何らかのメソッドを持つ必要がある。 インターフェイスは複数継承することができる。 A←C 親が複数=インターフェイス(inplement) B←┘ A←B 親は1つ=抽象クラス(abstract) ↑ C └-┘ 抽象クラスはメソッドを書かなくても、抽象クラス自身が持つことができる。 AppletContextインターフェース ― getAudioClipメソッド 学校インターフェイス―公立抽象クラス―理事長・教室・教師・生徒メソッド           └私立抽象クラス―校長・教室・教師・生徒メソッド 実装するとなるとこんな感じですか????

rescue99
質問者

補足

間違えていました。多分、こういうこと??? 学校抽象クラス―公立インターフェイス―理事長クラス                    ↑                    |教室・教師・生徒インターフェイス―教室・教師・生徒クラス                    ↓        └私立インターフェイス―校長クラス                    

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

その「-abstract(拡張)―」が何を意味するのかは知らないけど, なんとなく激しく勘違いしてる気もする. 「機能を細分化する」ってのは的を外してるような....

rescue99
質問者

お礼

ありがとうございます。 1つのクラスで書いてもいいですが、機能をわかりやすくするのに抽象クラスを使うのかと思いました。 たとえば、 学校抽象クラス-学年抽象クラス-生徒抽象クラス-個人情報クラス                       -成績クラス                       -出席率クラス わかりやすいクラスにするためのものが、 インターフェイス(implement)・抽象クラス(abstract)かと思っています。 的はずれですか????

rescue99
質問者

補足

#2の補足です。 #1の補足に失敗しました。これが正解です。 学校抽象クラス―公立抽象クラス―理事長クラス                    ↑                    |教室・教師・生徒インターフェイス―教室・教師・生徒クラス                    ↓          └私立抽象クラス―校長クラス 実装するにはこうなりますか?

関連するQ&A

  • 継承、実装についてまとめています。この図は正しいですか?

    継承、実装についてまとめています。この図は正しいですか? クラス1 から継承した クラス2のものを、クラス3で継承するのでしょうか? クラス1 │ int a; │ static int b; │ │ クラス1() { } │ │ int methodA () { } │ static int methodB() { } ↓ サブクラス1 extends クラス1 │ int a; // 継承 │ int c; │ static int d; │ │ サブクラス1() { } // コンストラクタは継承しない、super()で呼び出す │ │ int methodA () { } // 継承 │ int methodC() { } │ static int methodD() { } ↓ サブクラス2 extends サブクラス1 implements サブインタフェース1, サブインタフェース2… ↑ int a; // サブクラス1のフィールドを継承 │ int c; // 継承 │ int e; │ static int f; │ public static final int g; // 実装(サブインタフェース1) │ public static final int h; // 実装 │ │ サブクラス2() { } │ │ int methodA () { } // サブクラス1のメソッドを継承 │ int methodC() { } // 継承 │ int methodE() { } │ static int methodF() { } │ int methodG() { } // 実装(サブインタフェース1) │ int methodH() { } // 実装 │ interface サブインタフェース1 extends スーパインタフェース1... ↑ public static final int h; │ │ public abstract int methodE() { } // 継承 │ public abstract int methodH() { } │ interface スーパーインタフェース public static final int g; public abstract int methodG() { }

    • ベストアンサー
    • Java
  • 継承・実装の関係で悩んでいます。

    継承・実装の関係について悩んでいます。 ここでは、アクセス制御を考えずに、インスタンスかstaticかabstract(ここではabstract final staticやabstract classのこと)の違いで、どう継承するのか考えています。 // 継承 はメソッドのオーバーライドのことを考えます。(オーバーロードは考えない) クラスAからクラスBでオーバーライドしたメソッドは、 クラスCでさらにオーバーライドできるのでしょうか? クラスCが クラスBのクラスAからオーバーライドしたメソッド をクラスBのメソッドとして見たときに、オーバーライドすることは可能なのでしょうか? クラスA │ インスタンスフィールドA │ staticフィールドA │ │ クラスA() { } │ │ インスタンスメソッドA () { } │ staticメソッドB() { } ↓ クラスB extends クラスA │ インスタンスフィールドA // 継承 │ インスタンスフィールドB │ staticフィールドB │ │ サブクラス1() { } // コンストラクタは継承しない、super()で呼び出す │ │ インスタンスメソッドA () { } // 継承 │ │ インスタンスメソッドB () { } │ staticメソッドB () { } ↓ クラスC extends クラスB implements インタフェースD, ... ↑ インスタンスフィールドA // クラスBのフィールドを継承 │ インスタンスフィールドB // クラスBのフィールドを継承 │ インスタンスフィールドC │ staticフィールドC │ │ サブクラス2() { } │ │ インスタンスメソッドA () { } // クラスBのメソッドを継承 │ インスタンスメソッドB () { } // クラスBのメソッドを継承 │ インスタンスメソッドD () { } // インタフェースDのメソッドを実装 │ インスタンスメソッドE () { } // インタフェースDのメソッドを実装 │ │ │ インスタンスメソッドC () { } │ staticメソッドC() { } │ interface インタフェースD extends インタフェースE ↑ │ staticフィールドD // public static final │ │ インスタンスメソッドD() { } // public abstract │ インスタンスメソッドE() { } // 継承 │ interface インタフェースE staticフィールドE // public static final インスタンスメソッドE() { } // public abstract

    • ベストアンサー
    • Java
  • 【C#】内部だけで有効なインターフェースを作りたい

    C#2005でコンポーネントを作ろうと思っています。 そこであらゆるコンポーネントに共通な内部インターフェースが存在し、 更にはコンポーネントはいくつかの種類のコンポーネントを継承したいです。 不可能なコードで記すと、このようなことがしたいです。 【拡張TextBox】 public class ExTextBox : AbstractTextBox { } 【抽象TextBox】 public abstract class AbstractTextBox : TextBox, ICommonControl {  public AbstractTextBox() {   _ifMethod();  }  private void _ifMethod() {  ←これ   // 処理  } } 【内部インターフェース】 public interface ICommonControl {  void _ifMethod(); } インターフェースはpublic宣言以外定義が行えず、内部で利用される インターフェースとしては使えません。 別にインターフェースをそのまま実装すれば出来なくはないですが、 外部にインターフェースを実装したメソッドが見えるのはマズいです。 もしくは多重継承的なことが出来れば解決すると思うのですが・・・。 コンポーネントを継承する関係で、直前のクラスはTextBoxやLabelなどと いったクラスを継承するしかない為、それ以外の内部部分を共通化 したい場合に、どうすればいいのか分かりません。 実現させる方法が思いつかない為、何かシンプルな一例をご提示 頂けないでしょうか?

  • VisualStudio2008で、あるインタフェースを実装しているク

    VisualStudio2008で、あるインタフェースを実装しているクラスを探したり、あるクラスを継承しているクラスを探したりするよい方法はないでしょうか。普通の検索では結果が膨大で探すのが大変です。 EclipseにはNavigateメニューでできますが、VisualStudioにはないのかなと思い質問しました。

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

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

    • ベストアンサー
    • Java
  • インターフェースとサブクラスはどっちを使えばいい?

    ある機能Aを持ったクラスを作りたいとき、次の二つの方法があると思います。 (1) サブクラス → 機能Aを持ったクラスを拡張したサブクラスを作る。 (2) インターフェース → 機能Aを実現するメソッドをまとめてインターフェースにし、そのインターフェースを実装するクラスを作る。 これらの使い分けはどうすればよいのでしょうか?つまり、どういうときに(1)を使ってどういうときに(2)を使えばよいのでしょうか? 私が現在思いつく(1)と(2)の違いは以下の二つです。 ・(1)の方法は手軽 ・(1)の方法だと、一つのクラスの拡張しかできない これくらいでしょうか。もっと本質的な違いはあるのでしょうか?

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

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

    • ベストアンサー
    • Java
  • インタフェイス実装と抽象クラス継承を同時に使うには??

    私はjava初心者です、今練習問題で困っています。 1つのクラスに抽象クラスとインターフェイスを 実装することはできるのでしょうか? 例えば abstract class Car { private String gas; public void getGas(int gas) { this.gas = gas; } public abstract void enjin(); } interface Flying extends Pet { void show(); } 上のインタフェイスと抽象クラスを同時に下のクラスに継承、実装しよう とすると、どんな風にかけば良いのでしょうか class Zoon { public Zoon() { super(); } public void enjin() { System.out.println("どどどどど"); } public void show() { System.out.println("いいくるまだ"); } }

    • ベストアンサー
    • Java
  • インタフェースの実装はどこで?

    インタフェースに実装をもてるの?という質問で類似の内容への回答がありましたが、具体例としてどのようになるのかお聞きしたいです。 javax.sound.midiを使用したプログラムです。以下のようなソースを実行したとき、device[]にはMidiDeviceインタフェースを実装したクラスのインスタンスが格納される、というように理解しています。このうち、あるデバイスについてgetClass()を実行したところ、 com.sun.media.sound.MidiOutDevice という名称が出力されました。このクラスは一体どこで実装されているのでしょうか? ---------------------------------------------------------- info = MidiSystem.getMidiDeviceInfo(); device = new MidiDevice[info.length]; for(int i=0; i<info.length; i++){ try{ device[i] = MidiSystem.getMidiDevice(info[i]); } catch(MidiUnavailableException e){} }

    • ベストアンサー
    • Java
  • インターフェース

    インターフェースについて学ぼうと思っているのですが、 どうもいまいち何がなんだかわからなくなっています。 インターフェースはクラスによって実装され、 実装クラスはインターフェースで宣言されている 抽象メソッドを実行する とあるのですが、実装とは何ですか? 抽象メソッドとは何ですか?

    • ベストアンサー
    • Java