在面向对象编程时,除了使用抽象类来描述抽象的特性之外,还可以使用接口来阐述抽象的特性。从某些程度上讲,接口可以看作是抽象类的延伸。本节将重点介绍如何使用接口。
接口的基础
在声明接口时一般使用关键字 interface,其基本定义方式如下:
public interface baseInterface{ // 定义接口
void fun(); // 接口中的方法
}
在定义接口中的方法时,关键字 abstract 一般省略不写,而其访问控制权限也需要定义为 public 类型,否则不能被子类继承。该权限默认类型为 public,因此可以忽略不写。
接口和抽象类一样,不能被实例化。只能通过“子类”来实例化。在接口中只能定义空方法,而不能定义任何的方法体。在子类实例化时,需要将接口中的所有方法都“实例化”。接口的定义如下列代码所示:
package chapter10;
public interface baseInterface{ // 定义接口
public int add(); // 定义接口中的方法,均为空方法
public int min();
public int mul();
public int div();
}
接口的实现
当通过类实现接口时,需要使用关键字 implements 来实现某个接口。其作用类似于继承中的 extends 关键字。其基本用法如下:
public class 类名 implements 接口名{
// 类中的方法
}
在重写接口中的方法时,其返回值、形式参数等需要和接口中的定义方式一致,否则会被认为是类中自己的方法,而不是重写的接口中的方法。接口实现的代码如示例 1 所示。
【示例 1】接口的实现
在 baseInterface 类的基础下,创建interfaceClass 类,代码如下:
package chapter10;
public class interfaceClass implements baseInterface { // 继承接口
private int a;
private int b;
public void setA(int a) { // 实现接口中的方法
this.a = a;
}
public void setB(int b) {
this.b = b;
}
public int add() {
return a + b;
}
public int min() {
return a - b;
}
public int mul() {
return a * b;
}
public int div() {
return a / b;
}
public static void main(String[] args) {
interfaceClass interfaceClass = new interfaceClass(); // 定义接口类的对象
interfaceClass.setA(3);
interfaceClass.setB(5);
System.out.println(interfaceClass.a + "+"+ interfaceClass.b + "=" + interfaceClass.add());
System.out.println(interfaceClass.a + "-" + interfaceClass.b + "=" + interfaceClass.min());
System.out.println(interfaceClass.a + "*" + interfaceClass.b + "=" + interfaceClass.mul());
System.out.println(interfaceClass.a + "/" + interfaceClass.b + "=" + interfaceClass.div());
}
}
程序编译后,运行结果如下:
3+5=8
3-5=-2
3*5=15
3/5=0
从示例 1 可以看出,在使用接口作为基类时,接口中的方法均为空方法,而没有任何的方法体出现。当某类继承了这个接口之后,就需要将接口中的所有方法都实现,而在调用的时候也只能是通过子类的对象调用这些方法。