接口和抽象的区别?日常使用场景
在 Java 面试中,接口(Interface)和抽象类(Abstract Class)的区别及使用场景是高频问题。以下是清晰回答的总结:
一、核心区别
特性 | 接口(Interface) | 抽象类(Abstract Class) |
---|---|---|
定义方式 | 使用 interface 关键字 | 使用 abstract class 关键字 |
方法实现 | Java 8前只能有抽象方法;Java 8+支持default 和static 方法 | 可以有抽象方法(abstract )和具体方法 |
成员变量 | 默认是 public static final (常量) | 可以是任意类型(普通变量、静态变量等) |
构造方法 | 无构造方法 | 可以有构造方法(用于初始化抽象类的成员变量) |
继承/实现 | 一个类可实现多个接口 | 一个类只能继承一个抽象类 |
设计目的 | 定义行为契约(“能做什么”) | 定义类的部分实现(“是什么” + 部分公共逻辑) |
二、使用场景
1. 接口的典型场景
-
定义多继承行为:
例如:一个类需要同时实现Runnable
(多线程)和Serializable
(序列化)。public class Worker implements Runnable, Serializable {@Overridepublic void run() { /* ... */ } }
-
解耦和扩展性:
例如:定义策略模式中的算法接口,允许灵活替换实现。public interface PaymentStrategy {void pay(int amount); }public class