Java接口中的成员变量

接口中的成员变量为什么必须声明为public static final?

为什么要用final

接口中如果能定义非final的变量的话,而方法又都是abstract的,这就自相矛盾了,有可变成员变量但对应的方法却无法操作这些变量。虽然可以直接修改这些静态成员变量的值,但所有实现类对应的值都被修改了,这跟抽象类有何区别?又接口是一种更高层面的抽象,是一种规范、功能定义的声明,所有可变的东西都应该归属到实现类中,这样接口才能起到标准化、规范化的作用。所以接口中的属性必然是final的。

为什么要用static

这个问题和Java语言本身机制有关。我们知道Java不支持多继承,但是一个类可以实现多个接口。我们假设有两个接口A和B,而类C实现了接口A和B。假设,此时,A和B中都有一个变量N,如果N不是static类型的,那么在C中该如何区分N到底是A的还是B的呢?如果是static类型,我们可以通过A.N和B.N来区别调用A或者B中的成员变量N。

最后,接口只是对事物的属性和行为更高层次的抽象。对修改关闭,对扩展(不同的实现implements)开放,接口是对开闭原则(Open-Closed Principle)的一种体现。

https://www.cnblogs.com/chengdabelief/p/6204281.html
https://www.aliyun.com/jiaocheng/591486.html