10

私の質問は、セッター/ゲッター メソッドと静的フィールドをインターフェイスに記述し、それを別のクラスに実装するにはどうすればよいかということです。

例:

public interface MyInterface {
int number = 0;

public int setNumber(int num);{

 }
}

// Use it

public MyClass implements MyInterface{

 ...

public int setNumber(int num) {
   number = num;   // Error, Why?
 }
}

エラーnumber = numが発生しますが、メソッドでエラーは発生しませんsetName(...)!

4

5 に答える 5

24

インターフェイスでインスタンス フィールドを定義することはできません( Jonstatic finalのおかげで定数値でない限り)。これらは実装の一部にすぎないためです。したがって、ゲッターとセッターのみがインターフェースにあり、フィールドは実装に現れます。

の代わりにsetNumbera を返す必要があります。を取得するには、追加することをお勧めします。voidintint getNumber()

public interface MyInterface {
  void setNumber(int num); // public is implicit in interfaces
  int getNumber();         // obviously
}

public class MyClass implements MyInterface {
  private int number = 0;
  
  public void setNumber(int num) { this.number = num; }
  public int getNumber() { return this.number; }
}

ご覧のとおり、 のみsetNumberが の一部ですMyInterface。消費者は、数値がどのように格納されているかを知る必要がないため、実装の詳細です。

その上、Java では、クラスやインターフェースの名前をPascalCaseではなく で付けcamelCaseます。

于 2012-12-14T12:13:47.383 に答える
9

インターフェイスで値を定義すると、それは暗黙的に定義されますpublic static final 。つまり、インスタンス フィールドではなく、不変です。

インターフェイスは動作ではなくコントラクトを定義するために使用されるため、すべての実装にこのフィールドがあると主張するのは意味がありません。

ところで、あなたが持っている場合は、これを行うことができabstract classますinterface

于 2012-12-14T12:15:35.537 に答える
4

インターフェイスで宣言されているフィールドは、 deafulat によってそのまま変更することはできませんpublic static final

final一度初期化すると変更できないことがわかります。

また、インターフェイスでは、コードで行っているようにメソッドを実装することはできません。

;メソッド署名の後に置くだけ{}で(空でもありません{}):

public int setNumber(int num);
于 2012-12-14T12:15:31.290 に答える
3

インターフェイスには、メソッド本体の定義とフィールドを含めることはできません。デフォルトでは、通常は定数宣言に使用されますpublic。このインターフェースを実装する場所が定義されます。finalstatic

Java プログラミング言語では、インターフェイスはクラスと同様の参照型であり、定数、メソッド シグネチャ、およびネストされた型のみを含めることができます。メソッド本体はありません。インターフェイスはインスタンス化できません。クラスによって実装されるか、他のインターフェイスによって拡張されるだけです。

参照

ただしabstract class、具象メソッドと抽象メソッドを含めることができます。

于 2012-12-14T12:14:15.863 に答える
3

のフィールドはinterfaceデフォルトでpublic static finalです。つまり、constants.remember で既に初期化numberされてinterfaceおり、最終変数の法則を破る実装クラスでその値を変更しようとしています。

JLSから:

変数は final として宣言できます。final 変数は 1 回だけ割り当てることができます。変数 final を宣言すると、その値が変更されないという有用なドキュメントとして機能し、プログラミング エラーを回避するのに役立ちます。

割り当ての直前に割り当てが確実に解除されていない限り (§16)、final 変数が割り当てられると、コンパイル時エラーになります。

また、インターフェイスのメソッドは、デフォルトでパブリック抽象です。インターフェイスのメソッド シグネチャがわかりません。それは以下のようなものでなければなりません。

public void method();
于 2012-12-14T12:16:23.420 に答える