Java的接口(interface)
想了解接口(interface)我们先来看看接口的概念:(对修改关闭,对扩展开放)
接口狭义的来讲就是Java中的interface;广义的来讲就是对外提供规则的就是接口。
接口的特点:
1.接口是一种引用类型,可以等同看作类。修饰符 interface + 接口名
2.接口中只能出现常量(常量是静态的、公共的,默认修饰符:public static final(不写系统默认加上,没有顺序之分))和 抽象方法
3.接口其实是一个特殊的抽象类,特殊在接口是完全抽象的
4.接口中没有构造方法,接口也无法实例化
5.接口和接口之间可以多继承
6.一个类可以实现多个接口,这里的实现等同于继承
7.一个非抽象的类实现接口,需要将接口中所有方法实现/重写/覆盖
思考:为什么接口里面的值必须是常量final且静态static
因为借口不允许方法的实现,如果接口定义了变量,但是接口的方法又都是抽象的,在接口中是无法修改变量值的,当A继承了接口后,修改了变量的值;接着B也继承了该接口,但是此时B不知道接口中变量的值是否改变,这样就会造成混乱,因为接口的值是在变化的,此时接口就失去了原有的意义。所以,接口中只能定义常量,而且默认修饰符是public final static的。
有个博客解释的也挺好的:
知识点1:一个类,首先他会在内存里面有一个类对象,然后由类对象生成类的对象
知识点2:为什么接口Interface里面的值必须是常量呢? 因为类可以被实例化,实例化的类的对象里面的变量就会被赋初始值。比如String 是 null int是0,double是0.0。但是接口呢?接口不能被实例化,所以接口里面如果是变量的话不会被赋初始值这样就会出问题。所以接口里面的值必须是常量final而且一定是static不管写不写都是(这句话引用自李老师的讲课内容)
知识点3:那为什么它要是静态的呢?因为static是什么?是所有对象可以访问,而且可以直接通过类名访问。接口有对象么?显然没有,必须通过类名来访问所以是要静态的。