什么是接口:
在说明接口特点前,先要了解什么是接口,接口(Interface),它是一个抽象类型,是全部由抽象方法组成,简单来说,其实它就是抽象方法的集合。接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法
如果一个类只由抽象方法和全局常量组成,那么这种情况下不会将其定义为一个抽象类。只会定义为一个接口,所以接口严格的来讲属于一个特殊的类,而这个类里面只有抽象方法和全局常量,就连构造方法也没有。
示例:
/** * Created on 2018/4/18. */ public interface InterfaceDemo {//定义一个接口 public static final String MSG = "hello";//全局常量 public abstract void print();//抽象方法 }
接口的实现:
[修饰符] class <类名> [extends 父类名] [implements 接口列表]{
}
修饰符:可选参数,用于指定类的访问权限,可选值为public、abstract和final。
类名:必选参数,用于指定类的名称,类名必须是合法的Java标识符。一般情况下,要求首字母大写。
extends 父类名:可选参数,用于指定要定义的类继承于哪个父类。当使用extends关键字时,父类名为必选参数。
implements 接口列表:可选参数,用于指定该类实现的是哪些接口。当使用implements关键字时,接口列表为必选参数。当接口列表中存在多个接口名时,各个接口名之间使用逗号分隔。
在类中实现接口时,方法的名字、返回值类型、参数的个数及类型必须与接口中的完全一致,并且必须实现接口中的所有方法。
接口的特点:
1. 接口是对外暴露的规则;
2. 接口是程序的功能扩展
3. 接口的出现降低耦合性
4. 接口可以用来多实现
5. 类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口
6. 接口与接口之间可以有继承关系(Java中只有这里可以多继承,其余都是单继承)
抽象类与接口的对比
相同点:
1:都是不断向上抽取而来的
不同点:
1. 抽象类需要被继承,而且只能单继承,接口需要被实现,而且可以多实现
2. 抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法;接口中只能定义抽象方法,必须由子类去实现。
抽象类的继承,是 is a 关系,在定义该体系的基本共性内容,接口的实现是 like a 关系,在定义体系额外功能。
接口的使用
1、由于接口里面存在抽象方法,所以接口对象不能直接使用关键字new进行实例化。接口的使用原则如下:
(1)接口必须要有子类,但此时一个子类可以使用implements关键字实现多个接口;
(2)接口的子类(如果不是抽象类),那么必须要覆写接口中的全部抽象方法;
(3)接口的对象可以利用子类对象的向上转型进行实例化。
示例:
/** * Created on 2018/4/18. */ interface A{//定义一个接口A public static final String MSG = "hello";//全局常量 public abstract void print();//抽象方法 } interface B{//定义一个接口B public abstract void get(); } class X implements A,B{//X类实现了A和B两个接口 @Override public void print() { System.out.println("接口A的抽象方法print()"); } @Override public void get() { System.out.println("接口B的抽象方法get()"); } } public class InterfaceDemo { public static void main(String[] args){ X x = new X();//实例化子类对象 A a = x;//向上转型 B b = x;//向上转型 a.print(); b.get(); } }
输出结果:
接口A的抽象方法print()
接口B的抽象方法get()