java语言中关于抽象类和接口的区别(面试经常问到,因此总结一下)

来源:互联网 发布:淘宝开发团队多少人 编辑:程序博客网 时间:2024/04/26 09:29

         写下这篇文章的原因是基本上是在自己面试的时候很多公司都问我们这个问题,但是此前自己回答的都比较模糊,抓不到重点,毫无规律,特此在这总结一下。有什么不对的或不全的忘指出,万分感谢。

         先对他们进行说明:

          1.什么是接口?接口是一种规范,就像现实中生产主板和内存条或者网卡的不是同一家产商,但是为何内存或者网卡插入到主板上就能用呢,因为他们都遵守了某种规范。然后就可以使用。虽然他们的内部实现可能完全不同。就好比在java语言中的方法内部实现你不需要关心,只需要知道这个接口是怎样的干嘛的就行了,直接用。既然是一种规范,那他在编程语言中就能在架构中起到非常之大的作用,在一个应用程序之间的时候,接口体现的是一耦合标准。特别是在多个应用程序需要对接的时候。接口是多个应用程序的通信标准。

          2.什么是抽象类?就是对类更高的抽象。抽象类作为多个子类的共同父类。它所体现的是一种模版设计,抽象类作为多个子类的父类,可以把它理解为系统实现过程中的中间产品,这个中间产品已经实现了系统的部分功能,但是不能当成最终产品,还需要进一步的完善。

          他们的特征:接口和抽象类都不能实例化,他们都位于继承树的顶端,用于被其他类实现和继承。

                                   接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。

          他们的区别:

           属性:接口没有普通属性,只有静态属性,并且只能用public final static 修饰 (并且是默认的就算你在接口中定义Int i =0 它也会被隐式的加上public final static )

                       而抽象类可以有普通属性,可以有静态属性(类属性)

           方法:接口中的方法都没有方法体 并且都是默认使用public abstracrt 修饰,不能定义静态方法。 而抽象类可以有普通方法 也可以有没有抽象方法 也可以定义静态方法

           构造函数:接口中没有构造器   抽象类中有构造器,但是它不能用于new 对象 而是用于子类调用来初始化抽象类的操作。

           初始化块:接口中不能包含初始化块,而抽象方法中可以包含初始化块

           一个类只能有一个直接父类,包括抽象类,而类可以实现多个接口,弥补了java不能多继承的不足。

           

2 0
原创粉丝点击