接口 (英文:Interface)
概述:
接口在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口以interface关键字来声明。
类描述对象的属性和方法;接口则包含类要实现的方法
除非实现接口的类是抽象类,否则该类要实现接口中的所有方法
版本更新:
- 接口在jdk8之前,接口中只能有抽象方法,
- jdk8之后,接口中可以有默认方式和静态方法,jdk9之后可以有私有方法
抽象类与接口的相同点:
- 不能实例化对象
抽象类与接口的区别(面试题):
- 构造方法:
- 抽象类 :有构造方法。用于子类继承父类的时候给父类成员初始化。
- 接口 : 没有构造方法
- 成员
- 抽象类 :有变量,有常量;有具体的实现方法,有抽象方法
- 接口 : 只有常量;jdk1.8前只能有抽象方法。jdk1.8后,可以有默认方法,静态方法,jdk1.9后可以有私有方法。
- 抽象概念
- 抽象类 : 抽象类对类整体进行抽象,包括属性、行为,是对一种事物的抽象,即对类抽象
- 接口 : 接口是对行为的抽象
- 设计层面
- 抽象类 :抽象类作为很多子类的父类,它是一种模板式设计;抽象类加入新的具体方法时,那么所有的子类都继承到了这个新方法
- 接口 :接口是一种行为规范,它是一种辐射式设计;接口加入新的抽象方法时,那么所有的子类都必须重写这个新方法
定义格式
// 接口:
public interface 类名{
// 接口中只可定义常量,不可定义变量
public static final 常量名;
// 抽象方法
public abstract void training();
// 默认方法
default void fun2() {
//在jdk1.8后,接口中可以有默认方法,不常用
}
// 静态方法
public static void fun3() {
// 在jdk1.8后,接口中可以有静态方法,不常用
}
// 私有方法
private void fun4() {
//jdk1.9后,接口中可以放私有方法,不常用
}
}
接口的继承与实现:
- 接口无法被实例化,但是可以被实现
// 接口与接口可以多重继承,也可以多次继承
public interface 子接口名称 extends 父接口名称1,父接口名称2{}
// 类与接口可以多实现
public class 类名称 implements 接口名称1,接口名称2{}
instanceof
判断对象的类型
// 判断object属不属于class的类型
if(object instanceof class){
//是class类型为true
}else{
//不是class类型为false
}
抽象类和接口的应用场景
- 拥有一些方法并且想有一些有默认实现,使用抽象类。
- 实现多重继承,必须使用接口。由于Java不支持多继承,子类不能继承多个类,但可以实现多个接口。因此可以使用接口来解决。
- 基本功能在不断改变,就需要使用抽象类。如果使用接口,那么就需要改变所有实现了该接口的类。