Java基础--接口和抽象类的区别

任何不谈使用方法的空理论都是耍流氓html

使用场景

· 若是你拥有一些方法而且想让它们中的一些有默认实现,那么使用抽象类吧(Java1.8中接口也能够这么作了)java

· 若是你想实现多重继承,那么你必须使用接口。因为Java不支持多继承,子类不可以继承多个类,但能够实现多个接口。所以你就可使用接口来解决它。设计模式

· 若是基本功能在不断改变,那么就须要使用抽象类。若是不断改变基本功能而且使用接口,那么就须要改变全部实现了该接口的类。架构

具体的使用

· 接口更多的是在系统架构设计方法发挥做用,主要用于定义模块之间的通讯契约spa

· 而抽象类在代码实现方面发挥做用,能够实现代码的重用。架构设计

例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的全部Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就能够定义一个抽象的基类,让全部的Servlet都继承这个抽象基类,在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码,在各个子类中只是完成各自的业务逻辑代码设计

总结:日志

抽象类和接口的不一样点主要存在在三个方面:htm

· 默认实现继承

· 多重继承

· 需求稳定性

具体细节

参数

抽象类

接口

默认的方法实现

它能够有默认的方法实现

接口彻底是抽象的。它根本不存在方法的实现(java1.8能够实现了)

实现

子类使用extends关键字来继承抽象类。若是子类不是抽象类的话,它须要提供抽象类中全部声明的方法的实现。

子类使用关键字implements来实现接口。它须要提供接口中全部声明的方法的实现

构造器

抽象类能够有构造器

接口不能有构造器

与正常Java类的区别

除了你不能实例化抽象类以外,它和普通Java类没有任何区别

接口是彻底不一样的类型

访问修饰符

抽象方法能够有publicprotecteddefault这些修饰符

接口方法默认修饰符是public。你不可使用其它修饰符。

main方法

抽象方法能够有main方法而且咱们能够运行它

接口没有main方法,所以咱们不能运行它。

多继承

抽象方法能够继承一个类和实现多个接口

接口只能够继承一个或多个其它接口

速度

它比接口速度要快

接口是稍微有点慢的,由于它须要

时间去寻找在类中实现的方法。

添加新方法

若是你往抽象类中添加新的方法,你能够给它提供默认的实现。所以你不须要改变你如今的代码。

若是你往接口中添加方法,那么你必须改变实现该接口的类(有时感受接口的这个特色特别烦)

其余

参数

抽象类

接口

普通方法

默认为 public abstract

静态方法

能够有

不能有

普通成员变量

能够有

不能有

静态成员变量

能够有,修饰符任意

能够有只能是 public static final

参考资料

http://www.importnew.com/12399.html

相关文章
相关标签/搜索