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


当前回答

public interface A{
    int x=65;
}
public interface B{
    int x=66;
}
public class D implements A,B {
    public static void main(String[] a){
        System.out.println(x); // which x?
    }
}

这是解决方案。

System.out.println(A.x); // done

我认为这就是为什么界面变量是静态的原因之一。

不要在接口中声明变量。

其他回答

由于接口没有直接的对象,访问它们的唯一方法是使用类/接口,因此这就是为什么如果接口变量存在,它应该是静态的,否则外界将无法访问它。现在因为它是静态的,它只能保存一个值,任何实现它的类都可以改变它,因此它将是一团糟。

因此,如果有一个接口变量,它将是隐式静态的,最终的和明显的公共!!

因为:

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

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

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

参考:Abhishek Jain在quora上的回答

static -因为接口不能有任何实例。最后,因为我们不需要改变它。

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

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