0

インターフェイスのフィールドは定数値しか表現できないと読んだことがあります。私はこれに混乱しています。インターフェイス自体がこれらの値を設定することを意味しますか(定数インターフェイスのアンチパターン、これは悪いことです)、または実装クラスが定数に独自の値を設定できることを意味しますか。

後者は、たとえば、関連のないクラス (いくつかの共通インターフェイスによって統合されている) がたくさんあり、それらに関する情報を追加したい場合に役立ちます。例えば:

public interface Animal
{
  public void walk()
}

public class Cat implements Animal
{
  public void walk() 
  {
    doCatWalk();
  }
}

public class Dog implements Animal
{
  public void walk()
  {
    doDogWalk();
  }
}

ここで、 が発生するノイズに作用するメソッドを書きたいとしAnimalます。そのためには、ノイズが何であるかを知る必要があります。これはString変数であり、特定の動物に対して一定です。インターフェイスを次のように変更できますか

public interface Animal
{
  public static final String NOISE;
  public void walk();
}

たとえば、次のように実装Catします。

public class Cat implements Animal
{
  public static final String NOISE = "Miaow!";
  public void walk()
  {
    doCatWalk();
  }
}

またはそれは許可されていませんか?もちろん、代わりにゲッターを使用することもできますが、私が見た通常の方法は、定数に対して (暗黙的に静的で最終的な) ゲッター メソッドで public static finalはなくフィールドを使用することです。public

4

1 に答える 1

4

インターフェイスのフィールド宣言は暗黙的 public static finalに. これ

public interface Animal
{
    public static final String NOISE;
    public void walk();
}

初期化していないため動作しませんNOISE。たとえそうしたとしても、フィールドはメソッドのようにオーバーライドできません。そう

public class Cat implements Animal
{
    public static final String NOISE = "Miaow!";
    public void walk()
    {
        doCatWalk();
    }
    ...
}

static NOISEとして宣言された参照を介してのみアクセスできる独自のフィールドがあるだけですCat

于 2013-09-26T12:32:24.743 に答える