接口
Java中的接口是一个特殊的抽象类,接口中的所有方法都没有方法体。
比如,定义一个人类,人类可以为老师,可以为学生,所以人这个类就可以定义成抽象类。还可以定义几个抽象的方法,比如讲课,看书等,这样就行成了一个接口。
定义接口
语法格式如下:
[修饰符] interface 接口名 [extends 父接口名列表]{
[public] [static] [final] 常量;
[public] [abstract] 方法;
}
修饰符:可选,用于指定接口的访问权限,可选值为public。如果省略则使用默认的访问权限。
接口名:必选,用于指定接口的名称,接口名必须是合法的Java标识符。一般情况下,要求首字母大写。
extends 父接口名列表:可选参数,用于指定要定义的接口继承于哪个父接口。当使用extends关键字时,父接口名为必选参数。
方法:接口中的方法只有定义而没有被实现。
接口的继承
接口是可以被继承的。但是接口的继承与类的继承不太一样,接口可以实现多继承,也就是说接口可以有多个直接父接口。和类的继承相似,当子类继承父类接口时,子类会获得父类接口中定义的所有抽象方法、常量属性等。
接口的实现
接口可以被类实现也可以被其他接口继承。在类中实现接口可以使用关键字implements。
语法格式为:
[修饰符] class <类名> [extends 父类名] [implements 接口列表]{
}
修饰符:可选,用于指定类的访问权限,可选值为public、final和abstract。
类名:必选,用于指定类的名称,类名必须是合法的Java标识符。一般情况下,要求首字母大写。
extends 父类名:可选参数,用于指定要定义的类继承于哪个父类。当使用extends关键字时,父类名为必选参数。
implements 接口列表:可选参数,用于指定该类实现哪些接口。当使用implements关键字时,接口列表为必选参数。当接口列表中存在多个接口名时,各个接口名之间使用逗号分隔。
接口与抽象类
接口与抽象类的共同点如下:
(1)接口与抽象类都不能被实例化,能被其他类实现和继承
(2)接口和抽象类中都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。
接口与抽象类的用法差别如下:
(1)接口中只能包含抽象方法,不能包含普通方法;抽象类中可以包含普通方法。
(2)接口中不能定义静态方法;抽象类中可以定义静态方法。
(3)接口中只能定义静态常量属性,不能定义普通属性;抽象类里可以定义静态常量属性,也可以定义普通属性。
(4)接口不能包含构造器;抽象类可以包含构造器,抽象类里的构造器为了让其子类调用并完成初始化操作。
(5)接口中不能包含初始化块,但抽象类可以包含初始化块。
(6)一个类最多只能有一个直接父类,包括抽象类;但是一个类可以实现多个接口。
接口的UML图
顶部第1层是名字层,接口的名字必须是斜体字形,而且需要用<<interface>>修饰,并且该修饰和名字分布在两行。
中部第2层是常量层,列出接口中的常量及类型,格式是“常量名字:类型”。
底部第3层是方法层,也称操作层,列出接口中的方法及返回类型,格式是“方法名字(参数列表):类型”。
实现接口的UML图