接口:
一个类当中,所有的方法都是抽象方法,这个类就是作为制定规则的一个类,所有子类必需强制重写该类的所有方法。声明规则的就称之为接口。
- 接口也是一种引用数据类型。
接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。
存在的意义 :
用来定义规范。
用来做功能的拓展。
接口的定义:
- 接口用关键字interface关键字修饰;
public interface 接口名 {}
- 接口不能创建对象, 我们可以创建接口的子类,将抽象方法重写之后进行使用;
- 接口和类之间不是继承关系,是实现关系,实现接口用implements关键字表示;
public class 类名 implements 接口名 {}
- 接口的子类(实现类),要么重写接口中的所有抽象方法,要么子类也是抽象类,最终也将重写所有抽象方法。
- 接口的实现类,支持多实现,可以实现多个接口文件。
public class 类名 implements 接口1,接口2 {}
接口的特点:
成员变量,只能是常量,系统会默认加上三个修饰符:public static final;
没有构造方法,因为接口主要是扩展功能的,而没有具体存在;它的实现类中的构造方法中,super()访问的是所有类的父类object;
成员方法,只能是抽象方法,系统默认修饰符:public abstract;
JDK8之后的新特性:
JDK8新特性:
成员方法改进:允许接口定义带有方法体的非抽象方法,但是需要使用default关键字修饰,这种方法被称之为默认方法,用以解决接口升级问题。
- 默认方法定义格式:
public default 返回值 方法名(参数){} //public可以省略 default不能省略
- 默认方法不是抽象方法,不强势重写,但可以被重写;
- 如果实现类实现多个接口,多个接口中声明相同默认方法,则必需对默认方法进行重写,重写的时候去掉defaula关键字。
- 接口中允许定义static静态方法,需要使用static替换defaula使它成为静态方法,静态方法只允许被接口名调用。
JDK9新特性:
- 方法允许private私有化,私有化后应去掉defaula关键字。
类和接口的关系:
类与类的关系:
继承关系,只能单继承,但是可以多层继承。
类与接口的关系:
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口,如果直接父类和接口中出现了相同的方法声明,但代码逻辑不一样,优先使用父类的代码逻辑。
接口与接口的关系:
继承关系,可以单继承,也可以多继承,继承的多个接口出现了相同的方法声明,但代码逻辑不一样,则必需进行方法重写。