接口的基本特征

在java中接口有两种意思

  • 第一种是概念性的接口,指的是封装的内容对外界提供的服务(一开始一听接口一定以为就是这个吧)
  • 第二种是一种接口类型

定义接口使用interface关键字,实现接口使用implement关键字。这个类似于父类和子类。

注意点:

  • 接口成员变量默认是public或static或final类型的,必须显示初始化。例如
    public interface A
    {
    int a;
    protected int b;
    int c = 3;//正确,显式初始化表示定义同时要赋值,并且默认是上面三种类型
    |
  • 方法默认是public abstract类型。JDK8开始才可以有默认方法和静态方法之前只能有抽象方法。默认方法用default关键字声明,可以有自己的实现,接口实现类可以直接访问默认方法,也可以覆盖它。静态方法可以在接口内部访问或者实现接口的类通过使用接口名字来访问。
    public interface A
    {
    void method();//默认是public abstract
    public abstract void method2();
    abstract void method3();//编译器默认是public的
    public void method4();//不可以,必须要有abstract
    }
  • 接口没有构造方法,不能够被实例化
  • 接口可以继承于多个接口,但是不能实现接口。例如:
public interface A
{
....
}
public interface B
{}
public interface C extends A,B
{

}

  • 与子类继承抽象父类相似,当类实现某个接口时,必须要重写接口中的所有抽象方法,否则这个类必须定义成抽象类
  • 不允许创建接口的实例,但允许创建接口类型的引用变量,该变量引用实现了接口的类的实例(也可以看成是子类的实例)
  • 一个类只能够继承一个父类,但可以实现多个接口。例如:
    public class A extends Base implement intera, interb{...}。并且一个接口也可以由多个类来实现。

接口可以在一定程度上弥补一个类只能有一个直接父类的遗憾,有利于扩展。

接口模式

定制服务模式

这种模式就是利用接口可以继承多个接口,把多个子功能整合到一起变成一个大的服务。例如一个套餐里面有流量服务,电话服务,语音服务等等。这些都是一个接口。之后整合成整个的套餐包含上述服务

适配器模式

适配器就是用来做两个系统之间转换的。有两种方式实现转换。

第一种就是通过继承,继承源类的实例和目标类的接口。

第二种是通过组合,组合两种类的接口,然后实现。

例如,一个接口有add(a,b)函数,另一个有addone(a)函数,第二个函数不能作用是让a+1,但是它没有加法(假设)。这时我们设计一个接口,继承上面两个接口,这样我们就有办法用原接口的实现类从而实现加法完成第二个方法。

默认适配器模式

这种适配器其实是一个类,因为接口中都是抽象函数,所以当你使用适配器的时候不得不实现所有功能-即使你只想实现一个。所以干脆实现了一种类,这个类实现了所有抽象方法,但是内容全是空。这样再用其他类继承这个类就可以一次实现一种了。

代理模式

代理人其实就是中间人,代理类和代理人类似,这个类负责预处理一些消息,例如钱少于多少就直接拒绝。也负责向委托类传递信息。

标识类型模式

标识类型一般是标识某一类事物。例如事物,树,人物等等。使用这种接口而不是直接使用一个类的好处是便于同一管理。

常量接口

常量接口就是把一些常量放到一起。要使用的时候直接implements就可以了。

但是这种接口有一个弊端,就是破坏了封装性。为了解决这个问题,可以使用import static语句。import static允许直接访问另一个类的静态常量