gpt4 book ai didi

java - 我可以在接口(interface)中拥有一个表示常量的字段,然后实现类可以设置该常量吗?

转载 作者:行者123 更新时间:2023-12-01 18:43:15 27 4
gpt4 key购买 nike

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

如果我有一堆不相关的类(由一些通用接口(interface)统一)并且想要添加一些有关它们的信息,则后者会很有用。例如:

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(隐式静态和最终)getter常量的方法。

最佳答案

接口(interface)中的字段声明为implicitly 公共(public)静态最终。这个

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的引用来访问该字段

关于java - 我可以在接口(interface)中拥有一个表示常量的字段,然后实现类可以设置该常量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19028287/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com