2

私はJavaが初めてで、インターフェイスを理解しようとしています.メソッドなしでインターフェイスを作成すると、コンパイル時にエラーが発生します.この動作の理由は何ですか?

import java.io.*;
interface A{
int x=10;

}
class B implements A{


    System.out.print("i am in B and x is"+x);


}
class InterfaceEx{
    public static void main(String[] args) {
        A a;
        a=new B();

        }
}
4

5 に答える 5

5

はい、Java でメソッドのないインターフェースを持つことは可能です。実際、SerializableおよびCloneableインターフェイスは Java に組み込まれており、メソッドはありません。それらは「マーカー」インターフェースと呼ばれます。

マーカー インターフェイスに関するウィキペディアのページからの引用:

典型的なインターフェイスは、実装クラスがサポートする必要がある機能を (メソッド宣言の形式で) 指定しますが、マーカー インターフェイスはそうする必要はありません。このようなインターフェースが単に存在するということは、実装するクラスの一部に特定の動作があることを示しています。

インターフェイスがコンパイルされない理由B(コードを提供した後) については、ステートメントを次のようにメソッドまたはコンストラクター内に配置する必要があります。

class B implements A{
    public B() {
         System.out.print("I am in B and x is"+x);
    }
}
于 2013-11-04T18:19:41.747 に答える
1

はい。java.io.Serializableインターフェイスは、そのようなマーカー インターフェイスの例です。

于 2013-11-04T18:23:15.873 に答える
0
class B implements A{


    System.out.print("i am in B and x is"+x);


}

これは正当な構文ではありません。クラス定義には、変数またはメソッドのみを含めることができます。それでおしまい。そこにあるそのコード自体は、変数やメソッドの定義ではないため、コンパイラーはそれをどうすればよいかわかりません。

メソッドを定義すると、そのメソッド内に任意の命令を含めることができます。

class B implements A{

    public void myMethod(){

        System.out.print("i am in B and x is"+x);

    }


}

最初は混乱する可能性がありますが、クラスが何であるかを理解していないようです.OOPとJavaのかなり基本的な概念です.

また、エラーにも注意してください。1 つのエラーは別のエラーとは大きく異なります。このエラーは空のインターフェイスが原因であると想定しました。それは間違っていました。構文エラーでした。コンパイラの出力を読んだことがあれば、すでにこれを伝えているはずです。それはあなたを助けようとします。

于 2013-11-04T18:28:49.527 に答える
0

Java言語仕様によると

インターフェイスの本体では、インターフェイスのメンバー、つまり、フィールド (§9.3)、メソッド (§9.4)、クラス (§9.5)、およびインターフェイス (§9.5) を宣言できます。

そうしなければならないとは言っていないので、はい、空のインターフェースを持つことができます

上記の回答から、空のインターフェースがあります

于 2013-11-04T18:23:28.970 に答える