当我在分析项目中的代码时,我遇到了这种情况。 我有一个带有完整字符串常量声明的接口,如下所示
public interface SampleInterface {
String EXAMPLE_ONE = "exampleOne";
String USER_ID = "userId";
public void setValue();
}
如果任何类实现了这个SampleInterface
接口,那么它声明的变量会发生什么?
此外,最佳策略是什么:
答案 0 :(得分:29)
在Java的界面中,所有成员都隐式 public
,特别是字段隐式public static final
。 您没有选择。如果您尝试使用除公共之外的任何其他权限级别,编译器会尖叫您,因为它没有任何意义。
因此任何实现类都会继承成员,包括这些静态常量字段。
为什么要在界面中执行此操作有几个原因,通常是将其用作常量存储。这个习惯用于简单地将常量捆绑在一起,不一定要以OO方式将接口用作继承树的一部分。
所以你可以调用usuall MyInterface.MY_CONST
来访问你的一个常量。
通常在不需要定义任何行为的情况下通过接口执行此操作,因此当您不需要任何方法时。它实际上只是一个静态存储(通常,接口也是final
本身)。您也可以使用abstract class
,例如,如果要封装和隐藏实现的详细信息。但在这种情况下,你有两个领域和方法,通常你的目标只是提供一些常量和子类合同。
考虑到你的情况,还有一个方法签名作为你的界面的一部分,显然有意实现这个接口。在这种情况下,您仍然可以访问以下数据:
MyInterface.MY_CONST
,MyExtendingClass.MY_CONST
,instanceOfMyExtendingClass.MY_CONST
。有关详细信息,请查看: