• ベストアンサー

public interface

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

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

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

  • ベストアンサー
回答No.3

>回答No.2 amanojaku1 少し分かりにくかったかもしれないので、最初から書き直します。 インタフェースの宣言(interface) http://www.javaroad.jp/java_interface2.htm >インタフェースのアクセスレベルを指定します。publicがなければインタフェースと同じパッケージ内で定義されたクラスのみからアクセスできることを表します。publicがあれば全クラスからアクセスできることを表します。 つまり、全クラスから その「interface」にアクセス可能にしたければ「public」を付与する、同一パッケージ内のみだけから その「interface」にアクセスを制限したければ「public」を付与しない、と言う事になります。 「interface」に「public」が付与されてない場合は、「public」が付与されている「class」が存在する「java」ファイルや、「public」が付与されている「class」が存在しない(「public」が付与されてない「class」は存在しても良い)「java」ファイルにも記述可。 その場合メイン・クラスの外側にも記述可、クラスの内側にも記述可なようです(あくまで個人的な主観ですが、クラスの内側に「interface」を記述するのは あまり推奨されないような気がします)。 「interface」に「public」が付与されている場合、「public」が付与されている「class」が存在しない(「public」が付与されてない「class」は存在しても良い)「java」ファイルでないと記述できないようです(1ファイル内に複数の「interface」を記述可)、その「java」ファイルには「public」が付与されてない「interface」も混在可。

その他の回答 (2)

回答No.2

>回答No.1 amanojaku1 >「interface」専用の「java」ファイル 訂正です。 「public」が付与されている「class」が存在しない場合(「public」が付与されてない「class」が存在しても良いようです)、その「java」ファイルに「public」が付与されている「interface」が記述可能、その「java」ファイルには「public」が付与されてない「interface」も混在可能なようです。

回答No.1

インタフェースの宣言(interface) http://www.javaroad.jp/java_interface2.htm >インタフェースのアクセスレベルを指定します。publicがなければインタフェースと同じパッケージ内で定義されたクラスのみからアクセスできることを表します。publicがあれば全クラスからアクセスできることを表します。 つまり、全クラスから その「interface」にアクセス可能にしたければ「public」を付与する、同一パッケージ内のみだけから その「interface」にアクセスを制限したければ「public」を付与しない、と言う事になります。 「interface」に「public」が付与されてない場合は、「interface」専用の「java」ファイルやプログラム(classなど)が記述されているファイルにも記述可、その場合メイン・クラスの外側にも記述可、クラスの内側にも記述可なようです(あくまで個人的な主観ですが、クラスの内側に「interface」を記述するのは あまり推奨されないような気がします)。 「interface」に「public」が付与されている場合、「interface」専用の「java」ファイルでないと記述できないようです(1ファイル内に複数の「interface」を記述可だと思われます)、その「java」ファイルには「public」が付与されてない「interface」も混在可能なようです。

関連するQ&A

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

    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​

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

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

  • インターフェースの利点は?

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

  • interfaceとpackage

    パッケージつきのインターフェイスで初期化した文字列を別のJavaファイルで参照したいのですが、コンパイルエラーがでてうまくできません。 インターフェイス(TestI.java) package MyApplet; interface TestI{ String id="bug"; } Javaファイル(TestA.java) package MyApplet; public class TestA{ public static void main(String args[]){ System.out.println(TestI.id); } } 初歩的な質問ですがよろしくお願いします 。

  • Javaのインターフェイスの意味

    以前あった質問の回答やネット上での説明を見たのですが、よくわからなかったので質問します。 public interface CharSequence { int length(); } class MyClassWithCharSequenceIF implements CharSequence { public int length() { return 0; } } インターフェイスには、よく多重継承を可能にするメリットがあるという説明がありますが、 public interface CharSequence { int length(); } こんな短い処理を継承する意味があるのでしょうか?クラス内で実装するためにまた public int length() { return 0; } を書かなければならないのは時間・手間のメリットは何もないように思えます。というよりむしろ単なる二度手間ではないでしょうか? クラスの継承は長い記述などを一まとめにして呼び出せるメリットがありますが、インターフェイスの継承にはそれがありません。 いったい何の意味があるんでしょうか?

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

    Javaにおいて interfaceとClassは何が違うのでしょうか? またClassの中にinterfaceを書いても良いのでしょうか? Classの中にinterfaceを実装する物なのでしょうか? 恥を承知で質問致します。答えて頂けると嬉しいです。

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

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

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

    「インタフェースを実装してそれが持つ抽象メソッドをオーバーライドする」は正しい? はじめまして。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
  • Eclipseで例えば↓のようなInterfaceをimplement

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

    • ベストアンサー
    • Java
  • javaのインターフェースと動的制御について教えてください!

    javaのインタフェースと動的制御についての課題を出されたのですが、以下のようなものです ・起動させるクラス名はmain実行時にコマンドライン引数として渡す ・動的に呼び出されるクラスは2つ作成し、クラスその(1)現在の時間、 クラスその(2)クラス名を出力させる。 ・想定している構成として、メインクラス、インターフェース、動的ク ラス二つの計4クラスとする。 という問題で今のところ作成したクラスが以下のようなものです、インターフェースクラスと動的クラス二つはなんとかできて、このまま変化させずに置きたいです。メインクラスの見当がつきません、できたらメインクラスのアドバイスをどうかお願いします。ちなみに私はエクリプスをしようしています。 インターフェースクラス package Kadai1221; public interface Interface001 { void kurasu(); } 動的クラス二つ 一つめ package Kadai1221; import java.util.Calendar; public class Jikan implements Interface001 { public void kurasu() { Calendar now = Calendar.getInstance(); int zikan; int hun; int byou; zikan = now.get(Calendar.HOUR_OF_DAY); hun = now.get(Calendar.MINUTE); byou = now.get(Calendar.SECOND); System.out.println(zikan + "時" + hun + "分"          + byou + "秒"); } } 二つ目 package Kadai1221; public class Kurasumei implements Interface001 { public void kurasu() { System.out.println("Kurasumei"); } } メインクラス package Kadai1221; public class Kadaimain { /** * @param args */ public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ } } どうかよろしくお願いします。