java中抽象类用abstract关键字声明,不可实例化,用于定义子类必须遵循的结构;它可含普通方法、抽象方法、字段和构造器,但含抽象方法时类必须为abstract,且抽象方法无方法体、不能是private/static/final。

Java 中抽象类用 abstract 关键字声明,它不能被实例化,主要用来定义子类必须遵循的结构和共通行为。
如何声明抽象类
在 class 关键字前加上 abstract 即可声明一个抽象类。抽象类可以包含普通方法、抽象方法、字段、构造器等,但不能直接 new 出对象。
- 语法格式:abstract class 类名 { ... }
- 抽象类可以有构造器(供子类调用),但不能用 new 创建实例
- 抽象类可以不包含任何抽象方法,但只要含 abstract 方法,类就必须声明为 abstract
如何定义抽象方法
抽象方法只有声明,没有实现(即无方法体),必须用 abstract 修饰,且只能出现在抽象类或接口中。
- 语法格式:abstract 返回类型 方法名(参数列表);
- 抽象方法不能是 private、static 或 final(这些修饰符与“被子类重写”冲突)
- 子类继承抽象类时,必须实现所有抽象方法,除非子类也声明为 abstract
子类如何继承并实现抽象类
使用 extends 继承抽象类,子类需覆盖所有抽象方法(提供具体实现),才能被实例化。
- 若子类未实现全部抽象方法,该子类也必须声明为 abstract
- 子类可重写抽象类中的普通方法,也可直接调用
- 示例:抽象类 Animal 含 abstract void sound();Dog 类 extends Animal 并实现 sound() 输出“汪汪”
抽象类与接口的区别要点
抽象类侧重“是什么”(is-a 关系),支持单继承但可含构造器、成员变量、非抽象方法;接口侧重“能做什么”(has-a 或行为契约),支持多实现,方法默认 public abstract(Java 8+ 可含 default/static 方法)。
- 一个类只能 extends 一个抽象类,但可 implements 多个接口
- 抽象类中的字段可以是任意访问权限,接口中字段默认 public static final
- 抽象类适合共享代码和状态,接口适合定义能力契约
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











