Java 接口(Java interface)

Java 接口的关键字是interface

Java interface 语法

public interface 接口类名
{
  // 申明接口方法
}

public interface UserService
{
  public void addUser(String username, String password);
}

public 修饰这个接口 UserService, 为可公开的,

其中 'public void addUser(String username, String password);' 表示这个接口 定义了一个名为addUser的方法,这个方法表示,只要有个类实现了UserService, 那么它就必须实现这个addUser方法

public class UserServiceImpl implements UserService
{

  @Override
  public void addUser(String username, String password)
  {
    System.out.println("添加用户成功...");
  }
}

@Override 表示这个方法是重写

Java 为什么要有interface呢?

我们先讲一个例子,大家都知道,现在都是全球化,都是分工合作,降低成本; 比如生产汽车,一个公司不可能生产汽车所有的零件,也无法做到,因此这个时候就需要别人 的零件,并且零件还有从多家公司,这个时候就出现了一个问题,如何让其它公司生产我需要的零件呢? 答案就是生产汽车的公司定了一个标准,让那些生产零件的公司,按这个规格去生产, 这样任何需要和我公司合作都要按这个规格去生产就行了!

public class Test
{
  public static void main(String[] args) {
    // 第一版本 - 假设是插入到 mysql
    //UserService us = new UserServiceImpl();

    // 第二版本 - 假设是插入到 mongodb
    //UserService us = new UserServiceImpl2();

    // 第三版本 - 假设是插入 sequoiaDB
    UserService us = new UserServiceImpl3();
  }
}

假设公司在初创的时候,公司业务不多,用户不多,因此用mysql 可正常提供;

随着业务增长,mysql 抗不住了,我们开始使用mongodb, 这里我们直接使用了 UserServiceImpl2, 之前的代码UserServiceImpl直接注释,改成UserServiceImpl2, 程序又正常提供服务了;

后来我们的业务又增长了,又对数据库进行了升级改成了 sequoiaDB, 这里我直接使用了 UserServiceImpl3, 程序又正常提供服务了;

从上面的 UserServiceImpl -> UserServiceImpl2 -> UserServiceImpl3, 这个过程对 UserService us 都没有变,变的是实现类,也就是我们常说,定义规范,只要规范不变,那么不管内部 如何改变,外部都不需要改变,是不是感觉很好呢!

当然这只是其中的一个方面,最终其实是抽象类为了多态的实现.