接口中变量为什么是public static final,方法为什么是public abstract
接口中的所有成员变量默认都是public、static、final类型的,必须被显式初始化
接口中的所有方法默认都是public、abstract类型的。(当类实现某个接口时,它必须实现接口中所有的抽象方法,否则这个类必须被定义为抽象类)
一、接口中成员变量为什么必须是public static final
public比较好理解:因为接口定义后就是给别人用的,要让所有实现类来访问。
为什么要用final?
Static:首先,接口比抽象类更加抽象,它是最高层次的抽象。接口中的所有方法都是抽象方法,不会有任何实现方面的代码,而它的具体实现只能靠实现这个接口的具体类来做。继承的时候,子类的对象会拥有父类的变量,换言之这个变量属于特定的对象;接口强迫要求变量是static类型就是为了说明实现类的对象并不拥有接口中的变量。否则就会出问题:假设有两个接口A和B,而类C实现了接口A和B。假设,A和B中都有一个变量N,如果N 不是static类型的,那么C类的对象就拥有这两个N。那么在C中该如何区分N到底是A的还是B的呢?而,如果是static类型的,我们可以通过A.N和B.N来区别调用A接口或者B 接口中的成员变量N。
final:协议是所有实现接口的类都必须遵守的,final修饰就是保证接口定义的常量不能被实现类去修改。如果没有final的话,由子类随意去修改的话,接口建立这个常量就没有意义了。
二、接口中成员方法为什么必须是public abstract
Public:接口必须要具体类实现才有意义,所以必须是public。
Abstract:接口只是定义协议。
为什么不是抽象静态方法?
抽象静态方法是没有存在的意义的。如果可以定义抽象静态方法,设static abstract method(); 是抽象类A的方法,那么因为是静态方法那可以用A.method(); 而这个方法又是抽象的没有方法体,怎么执行呢?


