一、定义
接口就是指一个方法的集合,接口中的所有方法都没有方法体,在Java语言中,接口是通过关键字interface来实现的。
1.如何定义接口:定义接口中的成员
JDK1.7及以前
- 全局常量:
public static final 的
- 抽象方法:
public abstract 的
JDK8
除了定义全局常量和抽象方法之外,还可以定义静态方法和默认方法
知识点:
- 接口中定义的静态方法,只能通过接口来调用
- 通过实现类的对象,可以调用接口中的默认方法
- 如果子类(或实现类)继承的父类和实现的接口中声明了同名同参的默认方法,那么子类在没有重写此方法的情况下,默认调用的是父类中的同名同参数的方法–>类优先原则
- 如果实现类实现了多个接口。而这多个接口中声明了同名同参的默认方法,那么在实现类没有重写此方法的情况下,报错–>接口冲突
2.接口与类的相似点和区别
接口与类相似点:
- 一个接口可以有多个方法
- 接口文件保存在.java结尾的文件中,文件名使用接口名
- 接口的字节码文件保存在.class结尾的文件中
- 接口相应的字节码文件必须在与包名称相匹配的目录结构中
接口与类的区别:
- 接口不能用于实例化对象。(因为有抽象方法)
- 接口没有构造器
- 接口中所有的方法必须是抽象方法
- 接口不能包含成员变量,除了static和final变量
- 接口不是被类继承了,而是要被类实现
- 接口支持多重继承
3.解释:接口为什么要被实现,类怎么不实现类
首先:类为什么要继承类?
答:继承是父类中有非抽象内容可以直接拿来使用;而对于接口来说,内部都是抽象的,子类只能把父类实现后再实例化,才可以使用。
4.接口的特性
- 接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字
- 接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键子
- 接口是对外暴露的规则
- 接.口是程序的功能扩展
- 接口中的方法都是公有的。
二、规则
1.接口优先原则
当一个操作既可以使用抽象类又可以使用接口,则优先使用接口
2.接口命名规范
接口使用大写 I 开头
3.接口使用规则
子类要想使用接口,用implements关键字,一个子类可以同时实现多个接口(避免了单继承局限)
子类名称 implements 接口名称[, 其他接口, 其他接口..., ...]
4.子类命名规范
例如接口名为IMyInterFace,子类实现此接口名为MyInterFaceImpl
5.接口使用限制
接口中只允许public权限(无论是常量还是方法),即便程序员不写public,在接口中也默认为public
6.阿里编码规范
- 接口中不要出现任何修饰符号,即便是public也不行
- 当子类既需要实现接口,又需要继承抽象类时,请先使用extends继承一个抽象类,再用implements实现多个接口
- 一个抽象类也可以使用implements实现接口,而接口不能继承抽象类
- 接口可以使用 extends继承多个父接口(接口多继承)
7.接口的应用
- 定义操作标准
- 表示能力
- (了解)分布式开发之中暴露远程服务方法
8.重写接口中声明的方法时,需要注意以下规则:
- 类在实现接口的方法时,不能抛出强制性异常,只能在接口中,或者继承接口的抽象类中抛出该强制性异常。
- 类在重写方法时要保持一致的方法名,并且应该保持相同或者相兼容的返回值类型。
- 如果实现接口的类是抽象类,那么就没必要实现该接口的方法。
9.在实现接口的时候,也要注意一些规则:
- 一个类可以同时实现多个接口。
- 一个类只能继承一个类,但是能实现多个接口。
- 一个接口能继承另一个接口,这和类之间的继承比较相似。
- 当一个类实现了另一个接口后,子类必须对接口中的抽象方法全部覆盖,子类才可以实例化,否则子类只是一个抽象类。
10.代码演示多实现
interface Inter{
public static final int NUM=3;
public abstract void show();
}
interface InterA{
public abstract void method();
}
class Test implements Inter,InterA{
public void show() {
}
public void method() {
}
}
/*
* 支持多实现的原因:接口中没有方法主体,可以由子类任意定义
*/
public class InterfaceDemo {
public static void main(String[] args) {
}
}
11.为什么Java中有些接口没有任何方法?
在Java语言中,有些接口内部没有声明任何方法,也就是说,实现这些接口的类不需要重写任何方法,那么没有任何方法声明的接口又被叫做标识接口,标识接口对实现它的类没有任何予以上的要求,它仅仅充当一个标识的作用,用来表明实现它的类属于一个特定的类型。这个标签类似于汽车的标志图标,每当人们看到一个汽车的标志图标时,就能知道这款汽车的品牌。Java类库中已存在的标识接口有Cloneable和Serializable等。在使用时会常用instanceof来判断实例对象的类型是否实现了一个给定的标识接口。
三、抽象类与接口的区别
区别 | 抽象类 | 接口 | |
---|---|---|---|
1 | 结构组成 | 普通类+抽象方法 | 抽象方法+全局常量 |
2 | 权限 | 各种权限 | public |
3 | 子类关系 | 使用extends关键字继承抽象类 | 使用implements关键字实现接口 |
4 | 关系 | 一个抽象类可以实现若干接口 | 接口不能继承抽象类,但是接口可以使用extends关键字继承多个父接口 |
5 | 子类限制 | 一个子类只能继承一个抽象类 | 一个子类可以实现多个接口 |
6 | 设计理念 | 强调所属关系,is - a | 强调特定功能的实现,has - a |