任何不谈使用方法的空理论都是耍流氓html
· 若是你拥有一些方法而且想让它们中的一些有默认实现,那么使用抽象类吧(Java1.8中接口也能够这么作了)java
· 若是你想实现多重继承,那么你必须使用接口。因为Java不支持多继承,子类不可以继承多个类,但能够实现多个接口。所以你就可使用接口来解决它。设计模式
· 若是基本功能在不断改变,那么就须要使用抽象类。若是不断改变基本功能而且使用接口,那么就须要改变全部实现了该接口的类。架构
· 接口更多的是在系统架构设计方法发挥做用,主要用于定义模块之间的通讯契约spa
· 而抽象类在代码实现方面发挥做用,能够实现代码的重用。架构设计
例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的全部Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就能够定义一个抽象的基类,让全部的Servlet都继承这个抽象基类,在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码,在各个子类中只是完成各自的业务逻辑代码设计
总结:日志
抽象类和接口的不一样点主要存在在三个方面:htm
· 默认实现继承
· 多重继承
· 需求稳定性
参数 |
抽象类 |
接口 |
默认的方法实现 |
它能够有默认的方法实现 |
接口彻底是抽象的。它根本不存在方法的实现(java1.8能够实现了) |
实现 |
子类使用extends关键字来继承抽象类。若是子类不是抽象类的话,它须要提供抽象类中全部声明的方法的实现。 |
子类使用关键字implements来实现接口。它须要提供接口中全部声明的方法的实现 |
构造器 |
抽象类能够有构造器 |
接口不能有构造器 |
与正常Java类的区别 |
除了你不能实例化抽象类以外,它和普通Java类没有任何区别 |
接口是彻底不一样的类型 |
访问修饰符 |
抽象方法能够有public、protected和default这些修饰符 |
接口方法默认修饰符是public。你不可使用其它修饰符。 |
main方法 |
抽象方法能够有main方法而且咱们能够运行它 |
接口没有main方法,所以咱们不能运行它。 |
多继承 |
抽象方法能够继承一个类和实现多个接口 |
接口只能够继承一个或多个其它接口 |
速度 |
它比接口速度要快 |
接口是稍微有点慢的,由于它须要 时间去寻找在类中实现的方法。 |
添加新方法 |
若是你往抽象类中添加新的方法,你能够给它提供默认的实现。所以你不须要改变你如今的代码。 |
若是你往接口中添加方法,那么你必须改变实现该接口的类(有时感受接口的这个特色特别烦) |
参数 |
抽象类 |
接口 |
普通方法 |
默认为 public abstract |
|
静态方法 |
能够有 |
不能有 |
普通成员变量 |
能够有 |
不能有 |
静态成员变量 |
能够有,修饰符任意 |
能够有只能是 public static final |
参考资料