接口(interface)和抽象(abstract)类的区别

接口与抽象类的区别:

1 二者表达的概念不同。抽象类是一类事物的高度聚合,与子类的关系属于“是”的关系;而接口是定义行为规范,所以对于实现接口的子类来讲,相对于接口来讲,是“行为须要按照接口来完成”。spa

2 抽象类在定义类型方法的时候,能够给出方法的实现部分,也能够不给出;而对于接口来讲,其中所定义的方法都不能给出实现部分。继承

3 继承类对于二者所涉及方法的实现是不一样的。继承类对于抽象类所定义的抽象方法,能够不用重写,也就是说,能够延用抽象类的方法;而对于接口类所定义的方法或者属性来讲,在继承类中必需要给出相应的方法和属性实现。

4 在抽象类中,新增一个方法的话,继承类中能够不用做任何处理;而对于接口来讲,则须要修改继承类,提供新定义的方法。

以下给出二者的简单对比表格。接口

参数 抽象类 接口
默认的方法实现 它能够有默认的方法实现 接口彻底是抽象的。它根本不存在方法的实现
实现 子类使用extends关键字来继承抽象类。若是子类不是抽象类的话,它须要提供抽象类中全部声明的方法的实现。 子类使用关键字implements来实现接口。它须要提供接口中全部声明的方法的实现
构造器 抽象类能够有构造器 接口不能有构造器
与正常Java类的区别 除了你不能实例化抽象类以外,它和普通Java类没有任何区别 接口是彻底不一样的类型
访问修饰符 抽象方法能够有publicprotecteddefault这些修饰符 接口方法默认修饰符是public。你不可使用其它修饰符。
main方法 抽象方法能够有main方法而且咱们能够运行它 接口没有main方法,所以咱们不能运行它。
多继承 抽象方法能够继承一个类和实现多个接口 接口只能够继承一个或多个其它接口
速度 它比接口速度要快 接口是稍微有点慢的,由于它须要时间去寻找在类中实现的方法。
添加新方法 若是你往抽象类中添加新的方法,你能够给它提供默认的实现。所以你不须要改变你如今的代码。 若是你往接口中添加方法,那么你必须改变实现该接口的类。

何时使用抽象类和接口

  • 若是你拥有一些方法而且想让它们中的一些有默认实现,那么使用抽象类吧。
  • 若是你想实现多重继承,那么你必须使用接口。因为Java不支持多继承,子类不可以继承多个类,但能够实现多个接口。所以你就可使用接口来解决它。
  • 若是基本功能在不断改变,那么就须要使用抽象类。若是不断改变基本功能而且使用接口,那么就须要改变全部实现了该接口的类。

Java8中的默认方法和静态方法

Oracle已经开始尝试向接口中引入默认方法和静态方法,以此来减小抽象类和接口之间的差别。如今,咱们能够为接口提供默认实现的方法了而且不用强制子类来实现它。这类内容我将在下篇博客进行阐述。博客

相关文章
相关标签/搜索