说一下抽象类和接口的区别?抽象类和接口可以有方法体吗?Java 可以多实现或者多继承吗?
- 抽象类和接口的区别:
- 语法层面:抽象类使用 abstract 关键字修饰,其中可以包含抽象方法和非抽象方法;接口使用 interface 关键字定义,其方法默认都是抽象的,JDK8 开始可以有默认方法和静态方法。
- 实现方式:一个类只能继承一个抽象类,通过 extends 关键字;而一个类可以实现多个接口,使用 implements 关键字。
- 设计目的:抽象类主要用于对一组具有相似特征和行为的类进行抽象,作为它们的基类,体现的是一种 “is-a” 的关系;接口则更多地用于定义一组规范和契约,规定实现类必须提供的方法和行为,体现的是一种 “like-a” 的关系。
- 抽象类和接口中的方法体:抽象类中的抽象方法没有方法体,只有方法签名,需要子类去实现;非抽象方法可以有方法体。接口中的抽象方法默认没有方法体,但从 JDK8 开始,接口中的默认方法和静态方法可以有方法体。
- Java 中的多实现和多继承