abstract关键字强制定义抽象类与抽象方法:抽象类不可实例化,可含构造器、字段和具体方法;抽象方法无实现体,必须由子类重写;子类须实现全部抽象方法或自身声明为abstract;抽象类侧重“是什么”,接口侧重“能做什么”。

直接用 abstract 关键字声明类和方法,就能定义抽象类与抽象方法。它不是可选修饰,而是编译器强制执行的契约——写上去,就代表“这个类不能 new,这个方法必须由子类实现”。
声明抽象类:加 abstract 修饰 class
在 class 前加上 abstract 即可。抽象类可以含普通字段、构造器、具体方法,也能含抽象方法,但本身不能被实例化。
- 即使一个抽象类里没有任何抽象方法,只要加了
abstract,就不能new它 - 构造器是允许的,供子类通过
super()调用,初始化父类成员 - 常见写法:
abstract class Animal { String name; Animal(String name) { this.name = name; } }
定义抽象方法:只有声明,没有实现
抽象方法必须出现在抽象类中,语法上只有签名,以分号结尾,绝不能带方法体(即不能有 {} 或 return)。
- 必须用
abstract修饰,且不能是private、static或final - 例如:
abstract void makeSound();合法;abstract void makeSound() { }编译报错 - 只要类中有一个抽象方法,整个类就必须声明为
abstract
子类继承时的两条路径
子类用 extends 继承抽象类后,面临明确选择:
- 实现全部抽象方法 → 子类成为具体类,可以被实例化
- 不实现完所有抽象方法 → 子类必须也加
abstract声明,继续向下传递契约 - 重写抽象方法时,访问权限不能比父类更严格(如父类
public,子类不能写protected)
和接口的关键区别要拎清
抽象类侧重“是什么”,接口侧重“能做什么”:
- 一个类只能
extends一个抽象类,但能implements多个接口 - 抽象类可含构造器、普通方法、各种访问级别的字段;接口中字段默认
public static final,方法默认public abstract(Java 8+ 可加default或static) - 抽象类适合共享状态和基础逻辑;接口更适合定义能力契约或解耦行为
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











