抽象类用于表达“是什么”,支持单继承,可包含构造方法、成员变量和具体方法,适合共享状态与行为;接口定义“能做什么”,支持多实现,JDK 8 后可有 default 和 static 方法,但无构造器和实例字段,强调行为契约。选抽象类建模类本质,选接口建模对象能力。

抽象类和接口的核心区别在于设计意图和语法能力:抽象类用于表达“是什么”,强调类的继承关系和共性代码复用;接口用于定义“能做什么”,强调行为契约和多维度能力组合。
抽象类可以有构造方法、普通成员变量、静态方法、具体方法(含实现)、protected 和 private 成员;接口在 JDK 8 之前只能有 public static final 字段和 public abstract 方法,JDK 8 后可定义 default 方法和 static 方法,但不能有构造器、实例字段或非 public 成员。
抽象类适合描述具有共同状态和行为的一组类,比如“动物”抽象类可包含 name、age 字段和 breathe() 方法;接口适合定义能力契约,比如 Flyable、Swimmable、Runnable,让鸟、飞机、鸭子等不相关的类型都能实现同一行为。
JDK 8 引入 default 和 static 方法,JDK 9 支持 private 方法(用于 default 方法间复用),让接口更灵活。但这不是为了取代抽象类,而是弥补接口过去无法提供默认实现的短板,使其更适合定义“契约+轻量默认行为”的场景。
立即学习“Java免费学习笔记(深入)”;
基本上就这些。选抽象类还是接口,关键看你在建模“类的本质”还是“对象的能力”。不复杂但容易忽略的是:别为了省几行代码而滥用 default 方法——该由父类承担的共性逻辑,依然该放在抽象类里。
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号