一、什么是接口
实际上是一种特殊的抽象类
接口中所有的方法都是抽象方法
接口使用interface来声明
public interface MyInterface {
public void foo();
//其他方法
}
接口特性:
*接口不可以被实例化
*实现类必须实现接口的所有方法
*实现类可以实现多个接口(implements、多个接口使用逗号隔开)
*接口中的变量都是静态常量(public static final)
二、接口是一种约定
程序设计时面向接口的约定而不考虑具体实现
面向接口编程
public interface Paper {
String getSize();
}
public interface Inbox {
String getColor();
}
public class A4Paper implements Paper{
@Override
public String getSize() {
return "A4";
}
}
public class BlackInbox implements Inbox{
@Override
public String getColor() {
return "黑色";
}
}
public class Printer{
public void print(Paper p,Inbox box){
System.out.println("使用"+box.getColor()+"墨盒在"+p.getSize());
}
public static void main(String[] args) {
Printer p=new Printer();
Paper paper=new A4Paper();
Inbox box=new BlackInbox();
p.print(paper,box);
}
}
三、接口使用
接口中的成员变量
默认都是public static final的,必须显式初始化
接口中的方法
默认都是public abstract的
接口没有构造方法,不能被实例化
一个接口不能实现另一个接口,但可以继承多个其他接口
一个类必须实现接口抽象方法(implements),除非这个类也是抽象类
抽象类vs接口
相同点
代表系统的抽象层
都不能被实例化
都能包含抽象方法
用于描述系统提供的服务,不必提供具体实现
不同点
在抽象类中可以为部分方法提供默认实现,而接口中只能包含抽象方法
抽象类便于复用,接口便于代码维护
一个类只能继承一个直接的父类,但可以实现多个接口
使用原则
接口做系统与外界交互的窗口
接口提供服务
接口本身一旦制定,就不允许随意修改
抽象类可完成部分功能实现,还有部分功能可作为系统的扩展点