抽象类和接口的区别

返回 面试 · 速查全集 Java常见面试题

详细示例见 接口与抽象类


对比表

对比项抽象类接口
关键字abstract classinterface
继承/实现extends单继承implements可多实现
构造器
实例字段可有public static final 常量
方法抽象 + 普通具体方法抽象;Java 8+ default/static;Java 9+ private
访问修饰较自由方法默认 public
设计语义is-a(狗是动物)can-do(鸟能飞)
典型用途共享状态 + 部分实现能力契约、多继承式组合

怎么选

需要共享字段状态?           → 抽象类
需要多继承多种能力?         → 接口
is-a 继承体系?               → 抽象类
can-do 能力组合?             → 接口
回调 / 策略 / Lambda?        → 函数式接口

常见追问

Q:Java 8 以后接口有 default 方法,还要抽象类吗?
A:要。接口仍不能存实例字段;抽象类适合「模板方法 + 共享状态」的继承体系。

Q:一个类能 extends 多个类吗?
A:不能。多「父类型」能力靠 implements 多个接口

Q:接口 default 方法冲突怎么办?
A:实现类必须重写,用 A.super.method() 显式选择。

Q:抽象类能 implements 接口吗?
A:能。抽象类实现接口时可只实现部分,剩余留给子类。


相关笔记