搜索
写经验 领红包
 > 教育

接口和抽象类的区别面试(接口和抽象类的用法区别是什么)

导语:面试题系列:接口与抽象类的区别

在Java里面,接口与抽象类很类似,他们是Java中对于抽象类定义两种机制,正是由于这两种机制的存在,才赋予Java强大的面向对象能力。

从设计理念上,接口反映的是 “like-a” 关系,抽象类反映的是 “is-a” 关系。 抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。

具体说来,接口与抽象类的区别:

接口和抽象类的区别主要体现在以下 7 个方面。

区别1:定义关键字不同

接口使用关键字 interface 来定义,抽象类使用关键字 abstract 来定义

区别2:继承或实现的关键字不同

接口使用 implements 关键字定义其具体实现,抽象类使用 extends 关键字实现继承

区别3:子类实现或者继承的数量不同

接口的实现类可以有多个,而抽象类的子类,只能继承一个抽象类

区别4:属性访问控制符不同

接口中属性的访问控制符只能是 public,抽象类中的属性访问控制符无限制

区别5:方法控制符不同

接口中的方法默认控制符是 public,并且不能定义为其他控制符,抽象类中的方法控制符无限制,但是抽象方法不能使用 private 修饰

区别6:方法实现不同

接口中普通方法不能有具体的方法实现,在 JDK 8 之后 static 和 default 方法必须有方法实现,抽象类中普通方法可以有方法实现,抽象方法不能有方法实现

区别7:静态代码块使用不同

接口中不能使用静态代码块,抽象类中可以使用静态代码块

最后提两个问题:

第一、什么时候用接口,什么时候时候用抽象类

抽象类是对类的抽象,接口是对行为的抽象,抽象类定义的是类,接口定义的是行为。抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类。一般接口只是预先定义行为规范。

第二、Java抽象类中可以包含main方法吗?

是的,抽象类可以包含main方法,它只是一个静态方法,你可以使用main方法执行抽象类,但不可以创建任何实例。

本文内容由小葵整理编辑!