java中extends关键字用于声明单继承关系,实现“is-a”及代码复用;语法为class子类名extends父类名,仅支持一个父类,继承public/protected及同包default成员,不继承private成员、构造器和final类。

Java 中 extends 关键字用于声明类继承关系,实现单继承机制。它不是“复制粘贴代码”的快捷方式,而是建立明确的「is-a」类型关系,并为多态和代码复用打下基础。
基本写法与语法规则
语法固定为:class 子类名 extends 父类名 { ... },extends 必须紧跟在子类名之后、类体之前,且只能跟一个类名。
- 若不写 extends,该类默认隐式继承
Object - 不能用 extends 继承接口(要用
implements) - 不能用 extends 继承
final类(如String),编译直接报错 - 不允许写成
class A extends B, C—— Java 不支持多继承
哪些内容能被继承?哪些不能?
子类通过 extends 获得的是父类的非私有成员,具体取决于访问修饰符:
-
public和protected的字段与方法:可直接访问或调用 - 包级默认(default)成员:仅当子类与父类在同一包内时可访问
-
private成员:完全不可见,子类中访问会编译失败;需通过protected或public的 getter/setter 间接使用 - 构造器:从不被继承;但子类必须用自己的构造器,并在第一行调用
super(...)来初始化父类部分
子类构造器必须调用 super()
这是最容易出错也最常被忽略的关键点:
- 如果父类只有带参构造器(例如
Animal(String name)),子类构造器里必须显式写super(name),且必须是第一行 - 如果父类没定义任何构造器,编译器会自动提供无参构造器,此时子类可不写
super()(编译器自动补上) - 一旦父类定义了任意构造器(哪怕只有一个带参的),编译器就不再生成默认无参构造器,子类若不写
super(...)就会编译失败 -
super()和this()不能共存于同一个构造器中
重写方法(Override)要配合 @Override 使用
继承后,子类可通过重写来定制父类行为,但需满足严格条件:
- 方法签名必须完全一致(名称 + 参数类型 + 参数顺序)
- 返回类型可以是父类返回类型的子类型(协变返回)
- 访问权限不能比父类更严格(如父类是
protected,子类不能是private) - 不能重写
private、static或final方法 - 务必加上
@Override注解——它不是可选装饰,而是编译器检查工具,能帮你提前发现拼写错误或误写成重载(Overload)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











