java中接口与抽象类的区别
2015-03-06 18:47
141 查看
接口和抽象类的共同特征如下:
接口和抽象类都不能被实例化,位于继承树的顶端,用于被其他类实现和继承。
接口和抽象类都可以包含抽象的方法,实现接口的类或者继承抽象类的类都必须实现这些抽象的方法。
区别:二者的主要区别在于他们存在的目的不同,即设计的目的不同。
接口作为系统与外界交互的窗口,接口体现的是一种规范。
抽象类作为系统中多个子类的共同父类,抽象类体现的是一种模板式设计。
我们最关注的还是二者用法的区别:
(1)接口里只能包含抽象方法和默认方法,不能实现普通方法。抽象类完全可以包含普通方法。
默认方法如下所示:
(2)接口里不能定义静态方法;抽象类中可以。
(3)接口里只能定义静态变量,不能定义普通变量;抽象类即能定义静态变量又能定义普通变量。
(4)接口里不含构造器;抽象类中可以含有构造器。但不是用来创建对象的,而是让子类调用该构造器来完成抽象类的初始化的。
(5)接口里不能含有初始化块;但是抽象类中可以有初始化块。
(6)类是单继承,包括抽象类;但是接口的实现可以是多个,补充了java单继承的不足!
接口和抽象类都不能被实例化,位于继承树的顶端,用于被其他类实现和继承。
接口和抽象类都可以包含抽象的方法,实现接口的类或者继承抽象类的类都必须实现这些抽象的方法。
区别:二者的主要区别在于他们存在的目的不同,即设计的目的不同。
接口作为系统与外界交互的窗口,接口体现的是一种规范。
抽象类作为系统中多个子类的共同父类,抽象类体现的是一种模板式设计。
我们最关注的还是二者用法的区别:
(1)接口里只能包含抽象方法和默认方法,不能实现普通方法。抽象类完全可以包含普通方法。
默认方法如下所示:
public interface A { default void foo(){ System.out.println("Calling A.foo()"); } } public class Clazz implements A { } 即使Clazz类并没有实现foo()方法。在接口A中提供了foo()方法的默认实现。 这就是默认方法。
(2)接口里不能定义静态方法;抽象类中可以。
(3)接口里只能定义静态变量,不能定义普通变量;抽象类即能定义静态变量又能定义普通变量。
(4)接口里不含构造器;抽象类中可以含有构造器。但不是用来创建对象的,而是让子类调用该构造器来完成抽象类的初始化的。
(5)接口里不能含有初始化块;但是抽象类中可以有初始化块。
(6)类是单继承,包括抽象类;但是接口的实现可以是多个,补充了java单继承的不足!
相关文章推荐
- 详细解析Java中抽象类和接口的区别
- java中接口和抽象类的区别与联系
- 详细解析Java中抽象类和接口的区别
- java中的面向对象的误区之接口与抽象类的区别
- 面试常见题---------java中抽象类跟接口的区别
- java中接口与抽象类的区别
- java 中接口和抽象类的区别与对比
- java中接口和抽象类的区别
- 详细解析接口和抽象类的区别——Java
- java里抽象类和接口的区别
- 详细解析Java中抽象类和接口的区别
- JAVA之抽象类与接口的区别
- java基础之接口(抽象类与接口的区别)
- java 中的重载与重写 抽象类与接口的区别
- Java中抽象类与接口区别
- java中抽象类跟接口的区别
- Java中接口和抽象类的区别及使用的场合
- 详细解析Java中抽象类和接口的区别
- 详细解析Java中抽象类和接口的区别
- [Java] 接口(Interface)与 抽象类 (Abstract)使用规则和区别