实现接口
接口定义后不能直接创建对象,必须由类实现接口后创建类的对象。
[public] class 类名 extends 基类 implements 接口1,…{
//类体
}注意:接口中的方法都是抽象的,因此实现接口的类必须重写这些方法。
public class Circle implements Figure{
double radius;
public Circle(double r){
radius=r;
}
public void area(){
System.out.println("圆的面积="+pi*radius*radius);
}
}
注意:
方法头必须和接口定义中的方法头完全相同,public修饰符不能省略。
如果类实现了多个接口,必须重写这些接口中的所有方法。
接口不是类,不能使用new实例化接口,但可以声明接口变量。接口变量可以指向一个实现了该接口的类的对象。
Shape s=new Shape(); //错 Shape s=new Circle(); //对
可以使用instanceof来判断对象是否实现了某个接口。
虽然可以使用接口变量来引用实现接口类的对象,但这种引用只能引用接口的成员,否则会发生编译错误。 interface Output
{
final int MAX_CACHE_LINE = 10;
void out();
void getData(String msg);
}
interface Product
{
int getProduceTime();
}
public class Printer implements Output,Product
{
private String[] printData = new String[MAX_CACHE_LINE];
private int dataNum = 0;
public void out(){
while (dataNum>0)
{
System.out.println("打印机打印:"+printData[0]);
System.arraycopy(printData,1,printData,0,--dataNum);
}
}
public void getData(String msg){
if(dataNum >= MAX_CACHE_LINE){
System.out.println("输出队列已满,添加失败");
}else{
printData[dataNum++] = msg;
}
}
public int getProduceTime(){
return 45;
}
public static void main(String[] args){
Output o = new Printer();
o.getData("轻量级");
o.getData("Stu");
o.out();
o.getData("基于");
o.getData("Ruby");
o.out();
Product p = new Printer();
System.out.println(p.getProduceTime());
Object obj = p;
}
}
强调:接口最适合为不相关的类提供通用功能,利用接口提供的方法,程序可以多态地处理这些完全不同的类的对象。