Interface指定一个类必须做什么,而不规定如何去做。没有实例变量。一旦接口被定义,任何类可以实现一个接口。实现接口的类可以自定义自己的方法,利用多态,实现一个接口,多个方法。
当实现一个接口的方法时,必须声明为public。
类在实现接口的方法时可定义自己的成员。
定义callback为接口, Client为接口的实现类,Callback c = new Client();c被定义成接口类型,被Client实例赋值,只能访问Callback的方法,不能访问Client的其他方法。
如果一个类包含一个接口但是不完全实现接口定义的方法,那么该类必须声明定义成abstract型。
测试程序:
package my;
interface IntStack
{
void push(int item);
int pop();
}
class FixedStack implements IntStack
{
private int stck[];
private int tos;
FixedStack(int size)
{
stck = new int[size];
tos = -1;
}
public void push(int item)
{
if(tos == stck.length-1)
System.out.println("Stack is full");
else
stck[++tos] = item;
}
public int pop()
{
if(tos<0)
{
System.out.println("Stack underflow");
return 0;
}
else
return stck[tos--];
}
}
class DynStack implements IntStack
{
private int stck[];
private int tos;
DynStack(int size)
{
stck = new int[size];
tos = -1;
}
public void push(int item)
{
// TODO Auto-generated method stub
if(tos==stck.length-1)
{
int temp[] = new int[stck.length * 2]; // double size
for(int i=0; i<stck.length; i++) temp[i] = stck[i];
stck = temp;
stck[++tos] = item;
}
else
stck[++tos] = item;
}
@Override
public int pop()
{
// TODO Auto-generated method stub
if(tos<0)
{
System.out.println("Stack underflow.");
return 0;
}
return 0;
}
}
public class hello
{
public static void main(String[] args)
{
IntStack mystack; // create an interface reference variable
DynStack ds = new DynStack(5);
FixedStack fs = new FixedStack(8);
mystack = ds; // load dynamic stack
// push some numbers onto the stack
for(int i=0; i<12; i++) mystack.push(i);
mystack = fs; // load fixed stack
for(int i=0; i<8; i++) mystack.push(i);
mystack = ds;
System.out.println("Values in dynamic stack:");
for(int i=0; i<12; i++)
System.out.println(mystack.pop());
mystack = fs;
System.out.println("Values in fixed stack:");
for(int i=0; i<8; i++)
System.out.println(mystack.pop());
}
}
程序执行结果:
Values in dynamic stack:
0
0
0
0
0
0
0
0
0
0
0
0
Values in fixed stack:
7
6
5
4
3
2
1
0