为什么在Java中接口变量默认是静态的和最终的?


当前回答

在Java中,接口不允许你声明任何实例变量。使用在接口中声明的变量作为实例变量将返回编译时错误。

你可以声明一个常量变量,使用不同于实例变量的静态final。

其他回答

接口:系统需求服务。

在接口中,变量默认由public,static,final访问修饰符赋值。 因为:

public:有时候接口可能被放在其他包中。所以它需要从项目中的任何地方访问变量。

static:这样不完整的类不能创建对象。所以在项目中,我们需要访问没有对象的变量,这样我们就可以在interface_filename.variable_name的帮助下访问

final:假设一个接口由许多类实现,并且所有类都试图访问和更新接口变量。这样会导致数据变化不一致,影响到其他类。所以它需要用final声明访问修饰符。

接口可以由任何类实现,如果该值被其中一个实现类改变了,那么就会对其他实现类产生误导。接口基本上是指将两个相互关联但又不同的实体组合在一起。因此,在接口内部声明的变量将隐式是final的,也是静态的,因为接口不能被实例化。

因为其他任何东西都是实现的一部分,而接口不能包含任何实现。

在Java中,接口不允许你声明任何实例变量。使用在接口中声明的变量作为实例变量将返回编译时错误。

你可以声明一个常量变量,使用不同于实例变量的静态final。

因为:

静态:因为我们不能有接口的对象,所以我们应该避免使用对象级成员变量,而应该使用类级变量,即静态。

最后:这样变量的值就不会有歧义(Diamond问题-多重继承)。

根据文档,接口是契约而不是实现。

参考:Abhishek Jain在quora上的回答