インターフェースの使い方

このQ&Aのポイント
  • Javaを勉強している者です。
  • インターフェースで宣言しているインターフェースを別のクラスで宣言することも可能です。
  • 具体的なコード例として、MailStoreインターフェースをメインクラスで宣言して使用しています。
回答を見る
  • ベストアンサー

インターフェースの使い方。

javaを勉強している者です。あるコードを読んでいるのですが、そのなかでインターフェースで宣言しているインターフェース(日本語変な気がしますが)を別のクラスで、クラスみたいに宣言しているようなコードがあるのですが、それは文法的に大丈夫なのでしょうか?具体的には public interface MailStore{//いくつかのメソッドなど} というのがMailStore.javaで書かれていて別のMain.javaというコードの中で priate static MailStore _mailStore; public static MailStore getMailStore(){return _mailStore;} という2行がこの中で書かれています。 よろしくお願いします。 (ちなみにコードは「EclipseによるJava実用プログラミング」という本によるものです。下記のURLからダウンロード可能で、mailというディレクトリの中のコードです) https://products.locus.co.jp/index.php3

  • rapun
  • お礼率65% (196/300)
  • Java
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • jicchi2
  • ベストアンサー率27% (5/18)
回答No.1

問題ありません。 インターフェースについてもう少し勉強されればすぐにわかると思いますが、Main.javaの フィールド_mailStore は MailStoreインターフェース を実装した何れかのクラスということです。

rapun
質問者

お礼

回答ありがとうございます。 問題ないのですか、、ありがとうございます。ご説明も大変ありがたいのですが、まだ理解できないので、もう少しインターフェースについて勉強してみようと思います。

関連するQ&A

  • [クラス名].[メソッド名].[メソッド名]という書き方。

    javaを勉強している者です。 少しピンと来ない書き方があるのですがそれはタイトルの通りの書き方で、具体的には Main.getMailStore().isNewMail() という書き方です。MailというのがクラスでgetMailStore()というのがそのクラスで宣言されているメソッドで下記のように実装されています。(MailStoreというのはインターフェースとして別のファイルで宣言されています。) private static MailStore _mailStore; public static MailStore getMailStore(){ return _mailStore; } (MailStoreというインターフェースの中にisNewMailというメソッドは宣言されています。) public interface MailStore{ public boolean isNewMail(String uid); } これらだと、最初のMain.getMailStore().isNewMail()というのは、 「まず、MainクラスのgetMailStoreメソッドを呼び出して、そこでreturnされてくるMailStore型のクラスの中の、isNewMailメソッドを呼び出している」というのを一回で書いてしまっている書き方ということで合っているでしょうか?少しピンと来ないので・・(特にreturnされるメソッド(getMailStore)にそのまま.[メソッド]という書き方をのっけるあたりが) よろしくお願いします。

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

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

  • 「インタフェースを実装してそれが持つ抽象メソッドをオーバーライドする」

    「インタフェースを実装してそれが持つ抽象メソッドをオーバーライドする」は正しい? はじめまして。Javaのインタフェースに関する質問です。 私はこれまで、インタフェースを使うときは、インタフェースを実装してクラスを宣言し、そのクラス、またはサブクラスでインタフェースがもつすべての抽象メソッドを定義する、と理解していました。 しかし、下の例をみてください。抽象メソッドの定義を、インタフェースの実装の以前で与えています。問題無くコンパイルでき、実行できます。実行結果も以下の通りです。 インタフェースの抽象メソッドへの定義の与え方やその実行のされ方は、メソッドのオーバーライドと同様と思っていましたので、下記のコードでは「クラスBが抽象クラスではありません」や、「インタフェースの抽象メソッドがオーバーライドされていません」などの文法エラーがでると思っていました。 そこで、質問です。 インタフェースが持つ抽象メソッドの定義を与える場所について、または、これに関する説明のあるページなど、何かご存知でしたら教えてください。 ★コード★ interface X{   void show(); } class A{   public void show(){     System.out.println("A");   } } class B extends A implements X{ } public class Main{   public static void main(String[] args){     X x=new B();     x.show();   } } ★実行結果★ >java Main A ★Java環境★ java 1.6.0_21 javac 1.6.0_16

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

    Java public interfaceの記述場所について public interface ○○{ } public interfaceはJavaのコード中だったら、基本的には どこに 書いても良いものなのでしょうか? また書いてはいけない場所などは御座いますでしょうか? 初歩的な質問ですが答えて頂けると助かります。

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

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

    • ベストアンサー
    • Java
  • Eclipseで例えば↓のようなInterfaceをimplement

    Eclipseで例えば↓のようなInterfaceをimplementsしているクラスの一覧を調べたいといったような時に一覧を出す方法はあるでしょうか? (クラスだったら、コンストラクタで「呼び出し階層を開く」でいけるとおもうのですが) public interface Interface{}

    • ベストアンサー
    • Java
  • インターフェイスと抽象クラス

    なかなか理解が難しくて苦しんでいます。 で自分なりに理解したのですが、 抽象クラス→内容に決まっているメソッドと決まっていないメソッドがある場合に決まっていないメソッドを あとからオーバーライドするだけでスーパークラスで定義したすべてのメソッドを利用できる。 これでただしいでしょうか? で、インターフェイスなのですが、この抽象クラスとそっくりなんですが、 (1)変数は定数になる(強制static)(2)メソッドは名前のみの宣言(内容は記述できない) と言うことで、かなり???なのです。 何のために・・・???記述するんでしょうか?? ただひとつメリットがあるとしたら、インターフェイスを実装すると、インターフェイスの配列でインスタンスを 生成出来るということぐらいでしょうか。 そこでちょっとお門違いの疑問かもしれないんですが、 Runnable、やMouselistenerはメソッドの内容が書かれていないのに、 なぜ機能を持たせることが出来るのでしょう??? 認識違い、間違い等ありましたら、教えてください よろしくお願いいたします。

    • ベストアンサー
    • Java
  • singletonによるインターフェイスの実装

    Java勉強中の初心者です。 標題の件についてお願いします。 以下、簡単に条件を説明させていただきます。 Aクラス = メインクラス Bクラス = インターフェイスクラス Cクラス = DとEを動的に生成するクラス Dクラス = インターフェイスを実装するクラス Eクラス = インターフェイスを実装するクラス AクラスにB.getInstance(name)があります。 for文の無限ループがあります。 Cクラス class C { public static B getInstance(String name) { // Aクラスのaと変数nameが比較して一致したら // Dクラスのインスタンス生成 // 一致しなかったらEクラスのインスタンス生成 if(A.a.equals(name)){ return D.getInstance(); }else{ return E.getInstance(); } } } Dクラス class D implements B{ private D() { } public static D getInstance() { D d = new D(); return d; } // インターフェイスでのメソッド省略します。 } Eクラス class E implements B{ private E() { } public static E getInstance() { E e = new E(); return e; } // インターフェイスでのメソッド省略します。 } この条件の時にnewするたびにインスタンスが 生成されてしまいます。 インスタンスの生成が一度だけしか 生成されないようにするには、C,D,Eクラスで どのように記述すればいいか悩んでいます。 (骨組みは書けましたが) クラスを簡単に省略してわかりづらいと 思いますがよろしくお願いします。

    • ベストアンサー
    • Java
  • インターフェースについて

    いまサーブレットをやっています。 Java言語仕様では、 「インターフェースの定義には、メソッドの定義を書いてはいけない」 (メソッドの定義はそのインターフェースをimplementsしたクラスのなかで オーバーライドする) ということになってますよね? …でも、 APIリファレンスを読むと、 インターフェースHttpServletRequestのメソッドgetParameterには、 「リクエストパラメータの値をString型として返す」と書かれています。 ↑これって上記のJava言語仕様と矛盾してませんか? まるでどこかでgetParameterメソッドの定義がなされているかのようです。 これってどういうことでしょう? 考えれば考えるほど、訳わかりません。とっても混乱中です(-_-)

    • ベストアンサー
    • Java
  • インターフェースの利点は?

    Javaを勉強しております。 インターフェースの使い方を知ったのですが、その利点がわかりません。 インターフェースの記述の仕方はクラスによく似ていますが、インターフェースでできること(フィールドやメソッドを書く)はクラスでもできると思います。 インターフェースでしかできないことはあるのでしょうか? インターフェースはどのような場面で活用するのが有効なのでしょうか?

専門家に質問してみよう