为什么在Java中接口变量默认是静态的和最终的?
当前回答
接口:系统需求服务。
在接口中,变量默认由public,static,final访问修饰符赋值。 因为:
public:有时候接口可能被放在其他包中。所以它需要从项目中的任何地方访问变量。
static:这样不完整的类不能创建对象。所以在项目中,我们需要访问没有对象的变量,这样我们就可以在interface_filename.variable_name的帮助下访问
final:假设一个接口由许多类实现,并且所有类都试图访问和更新接口变量。这样会导致数据变化不一致,影响到其他类。所以它需要用final声明访问修饰符。
其他回答
接口可以由任何类实现,如果该值被其中一个实现类改变了,那么就会对其他实现类产生误导。接口基本上是指将两个相互关联但又不同的实体组合在一起。因此,在接口内部声明的变量将隐式是final的,也是静态的,因为接口不能被实例化。
Public:用于所有类的可访问性,就像接口中呈现的方法一样
static:作为接口不能有对象,即interfaceName。variableName可以用来引用它,也可以直接在实现它的类中引用variableName。
最后:使它们成为常量。如果两个类实现了相同的接口,并且您赋予它们更改值的权利,那么在var的当前值中就会发生冲突,这就是为什么只允许一次初始化。
而且所有这些修饰符对于接口来说都是隐式的,你真的不需要指定它们中的任何一个。
因为其他任何东西都是实现的一部分,而接口不能包含任何实现。
摘自Philip Shaw的Java接口设计常见问题解答:
接口变量是静态的,因为Java接口不能自己实例化;变量的值必须在不存在实例的静态上下文中赋值。最后一个修饰符确保分配给接口变量的值是一个真正的常量,不能被程序代码重新分配。
源
接口:系统需求服务。
在接口中,变量默认由public,static,final访问修饰符赋值。 因为:
public:有时候接口可能被放在其他包中。所以它需要从项目中的任何地方访问变量。
static:这样不完整的类不能创建对象。所以在项目中,我们需要访问没有对象的变量,这样我们就可以在interface_filename.variable_name的帮助下访问
final:假设一个接口由许多类实现,并且所有类都试图访问和更新接口变量。这样会导致数据变化不一致,影响到其他类。所以它需要用final声明访问修饰符。
推荐文章
- 一对多、多对一、多对多的区别?
- 从枚举中选择一个随机值?
- 如何从URL获取参数与JSP
- 如何在Eclipse中生成Javadoc注释?
- 找到java类从哪里加载
- 从集合中随机选取一个元素
- 为什么x == (x = y)和(x = y) == x不一样?
- 什么Java 8流。收集等价物可在标准Kotlin库?
- 等待未来的名单
- 如何检查JSON键是否存在?
- 为什么MongoDB Java驱动在条件中使用随机数生成器?
- 即使从未抛出异常,使用try-catch块的代价是否昂贵?
- 什么时候我们应该使用观察者和可观察对象?
- Java中的split()方法对点(.)不起作用。
- Eclipse调试器总是阻塞在ThreadPoolExecutor上,没有任何明显的异常,为什么?