接口在定义时不需要方法,它的方法在多个类中定义,藉此来增强多态性。接口的方法必须是public。
如果一个类对接口的方法的定义不完全,则该类必须定义成abstract。方法的定义必须在其子类里完善。
关于接口的实践,笔者用《Core Java》中的例子来诠释:
堆栈的push和pop是很适合用接口来定义的,首先定义一个用以存放整型的堆栈接口
//integer stack interface
interface IntStack{
void push(int a);
int pop();
}
再定义一个固定长度的堆栈和一个变长的堆栈
class FixedStact implements IntStack{
//定义定长的pop和push方法
}
class DynStact implements IntStack{
//定义变长的pop和push方法
}
多态性的展示
class test{
public static void main(Strings args[]){
IntStact a;
DynStact ds=new DynStact();
FixedStact fs=new Fixedstact();
a=ds; System.out.println(a.pop());
a=fs; System.out.println(a.pop());
}
}
这是一个不完整不能实现的例子,但是用于理解思想是可以的。接口可用不同的方式得以实现。
除此以外,还可以将接口当作C的#define或const用。创建一个接口不包含方法,只有变量,就可以在多个类中共享常量。
接口也可以继承。但是当一个类实现接口的子类时,该类必须把所有的父类的方法都实现。