text: 实际的app开发中JAVA的接口和抽象类有什么作用？
  这个问题涵盖很广，你可以找一些谈抽象的概念的书来看看，这里举一个场景来说明他们主要的功能：1、M公司里有3个开发小组，A组中的人擅长业务逻辑的分析和开发，B组的人擅长数据库设计和开发，C组的人擅长算法，各组有一个主程。2、N公司找到M公司，需要M公司开发一款软件，软件的功能如下：     N公司是卖蛋糕的，他们在每个城市有多个店，有多个工厂，每个店需要工厂向他们供应足够的货，同时又希望供货工厂送货的距离最短。软件需要在用户输入每个工厂第二天需要订货的数量之后生成一份表格，告诉N公司应该怎样由所有的工厂向所有的店送货。3、M公司的3个开发小组开始工作。 在讨论会上，A组向B组合C组提出了如下需求：     B组需要为A组提供一组接口，A组调用接口中的方法实现店面、工厂位置的存储、修改、删除、查询。     C组需要为A组提供一组接口，A组输入一些店面和工厂的信息，接口中的方法返回最优的送货结果。     A组的重心放在用户的交互界面上。     会议的结果是B组和C组拟定了一组接口文件。4、B组需要为很多个表去写增删改查，其中有很多重复性的工作，比如为一个Dao获取session，比如都需要有增删改查。增删改查方法的结构都差不多，就是sql语句不一样。于是B组的主程为所有的Dao写了一个父类，这个父类里面，Dao的构造函数包含了获取session，增删改查的功能除了sql的部分都完成了，就是有4个函数getInsertSql()、getUpdateSql()、getDeleteSql()、getSelectSql()要根据每个表的具体功能去实现。所以主程将这4个函数设置为虚函数，而这个父类自然就成了一个抽象类。    B组的成员在为每个表写功能的时候，只需要继承这个抽象类，填入4中sql语句，就完成了。这个案例展示了接口和抽象类在合作中的作用，当然很多时候我们在一个人写代码的时候也会这么做，它体现了一种从目的到方案，从大方案到每个子系统的小方案，从抽象方案到具体方案的解决问题方法和思路。
  这幅图是一道面试题；说的很清楚了(I_M_G)