接口:就是一种规则(是对行为的抽象)
接口的定义和使用:
- 接口用关键字interface来定义 public interface 接口名{}
- 接口不能实例化
- 接口和类之间是实现关系,通过implements关键字表示 public class 类名 implements 接口名{}
- 接口的子类(实现类)要么重写接口中所有的抽象方法,要么是抽象类
注意:
- 接口和类的实现关系,可以单实现也可以多实现。 public class 类名 implements 接口名1,接口名2{}
- 实现类还可以在继承一个类的同时实现多个接口。public class 类名 extends 父类 implements 接口名1,接口名2{}
接口中成员的特点:
1.成员变量:只能是常量,默认修饰符:public static final
2.没有构造方法
3.成员方法只能是抽象方法 默认修饰符:public abstract
接口和类之间的关系:
- 类和类的关系:继承关系,只能单继承,不能多继承,但是可以多层继承
- 类和接口的关系:实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
- 接口和接口的关系:继承关系,可以单继承也可以多继承(如果实现类实现了最下面的子接口,那么就需要重写所有的抽象方法)
扩展
1.允许在接口中定义默认方法,需要使用关键字default修饰(作用:解决接口升级的问题)
接口中默认方法的定义格式:
- 格式:public default 返回值类型 方法名(参数列表){ }
- 范例:public default void show (){}
接口中默认方法的注意事项
- 默认方法不是抽象方法,所以不强制被重写。但是如果被重写,重写的时候去掉default关键字
- public可以省略,default不能省略
- 如果实现了多个接口,多个接口中存在相同名字的默认方法,子类就必须对该方法进行重写
2.允许接口中定义静态的方法,需要用static修饰
接口中静态方法的定义格式:
- 格式:public static 返回值类型 方法名(参数列表){ }
- 范例:public static void show(){}
接口中静态方法的注意事项:
- 静态方法只能通过接口名调用,不能通过实现类名或对象名调用
- public 可以省略,static不能省略
3.接口中私有方法的定义格式:
- 格式一:private 返回值类型 方法名(参数列表){ }
- 范例一:private void show(){ }(为默认方法服务)
- 格式二:private static 返回值类型 方法名(参数列表){}
- 范例二:private static void method(){ }(为静态方法服务)