繁体   English   中英

我可以在接口中有一个表示常量的字段,然后可以通过该字段设置类吗?

[英]Can I have a field representing a constant in an interface that implementing classes can then set?

我读过接口中的字段只能代表常量值。 我对此感到困惑。 这是否意味着接口本身设置了这些值(常量接口反模式,这很不好),或者实现类可以为常量设置自己的值。

例如,如果我有一堆不相关的类(由某些公共接口统一)并想添加有关它们的信息,则后者将很有用。 例如:

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();
  }
}

还是那是不允许的? 我当然可以使用getter代替,但是我看到的通常做法是使用public static final字段,而不是使用常量的public (隐式静态和final)getter方法。

接口中的字段声明是隐式的 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的引用来访问

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM