text: Java-抽象类和接口的区别-Andya_net
  1)抽象类与接口的问题，以前校招毕业时面了好几个公司，都会被问到，其实这也是开发过程中经常遇到的问题，在这里所说的接口是指jdk1.8之前的，因为jdk1.8中接口是可以有默认方法等改动的。
  2)如果为了面试，直接跳过所有的，看我整理的那张表格就行了。
  如果一个类包含一个或多个抽象方法，该类必须被限定为抽象的(否则，编译器会报错) 含有abstract修饰符的class即为抽象类，abstract类不能创建实例对象。
  可以说成是抽象类的一种特例，接口中的所有方法都必须是抽象的。
  能有的内容是:static final的静态成员变量、public abstract的抽象方法(可以使用abstract关键字也可以不使用) 接口中的域隐式地是static和final的;接口可以嵌套在类或其他接口中;
  接口是实现多重继承的途径;
  接口不能有构造器;
  接口中不能有main()方法;
  初始化过程 :当一个类在初始化时，要求其父类全部都已经初始化过了;但是一个接口在初始化时，并不要求其父接口全部都完成初始化，只有在真正使用父接口的时候(如引用接口中定义的常量)，才会初始化。
  接口更多的是在系统架构设计方法发挥作用，主要用于定义模块之间的通信契约;而抽象类在代码实现方面发挥作用，可以实现代码的重用。
  例如，模板方法设计模式是抽象类的一个典型应用，假设某个项目的所有Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常，那么就可以定义一个抽象的基类，让所有的Servlet都继承这个抽象基类，在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码，在各个子类中只是完成各自的业务逻辑代码。
  答:如果要创建不带任何方法定义和成员变量的基类，就应该选择接口而不是抽象类。
  1)为了能够向上转型为多个基类型(由此而带来的灵活性);2)与使用抽象基类相同:防止客户端程序员创建该类的对象，并确保这仅仅是建立一个接口。