接口是Java中的一种抽象类型,编译之后也是生成.Class文件,接口不是类,接口类似于抽象类,但接口是完全抽象的,接口中只允许存在抽象方法,不允许存在普通方法
接口的声明语法为: 修饰符列表 interface 接口名{}
接口没有构造方法,无法实例化,一个类实现接口时必须实现接口中所有的抽象方法,否则必须声明为抽象类
接口类型可以用来声明变量,这个变量可以成为空指针或者指向这个接口的实现类对象
接口中的变量会默认添加public static final 关键字 接口中的方法会默认添加public abstract关键字
意味着接口中只能存在抽象方法和常量,我们在写接口时最好不要写默认添加的部分
Java中实现和继承同时出现的时候先继承,再实现
所以完整的定义类的语法为:修饰符 Class 类名 extends 类名 implements 接口1,接口2...{类体}
一个类可以实现多个接口,接口之间可以多继承,继承了多个接口的接口在实现时需要实现所有父类的抽象方法
接口使用时一般通过多态机制(父类型引用指向子类型对象)
从Java8开始,接口中可以出现默认方法和静态方法,默认方法的修饰符必须为default,实现类对象可以直接调用默认方法,默认方法和静态方法是已经实现的方法,接口中的静态方法必须通过接口名.的方式进行调用。 这些特性的加入可以让已经有大量实现类的接口更方便的进行扩展
在接口和抽象类的选择:接口一般表示扩展的附加的行为,抽象类一般表示应该有的本身存在的行为,类之间的继承一般表示“是不是”的关系,而接口的实现一般表示“有没有”的关系
例如狗类,狗应该会跑,但不是所有狗都会导盲,所以一般导盲这种行为添加到接口中,让该实现的子类实现
接口可以降低程序的耦合度,提高程序的扩展性,符合我们开发原则的基准原则:OCP开闭原则
即面对扩展开放,面对修改关闭



