java中类继承必须用extends显式声明,是编译期确定的单继承静态关系;子类继承父类public/protected及同包default成员,不继承private成员和构造器;子类构造器首行须显式或隐式调用super()。

在 Java 中,类与类之间的继承关系必须通过 extends 关键字显式声明,这是唯一合法的语法形式。它不是可选修饰,也不是运行时行为,而是在编译期就确定的静态结构关系。
基础语法与基本写法
子类定义时,在 class 声明后紧跟 extends 父类名:
public class Penguin extends Animal { ... }class Student extends Person { ... }
父类必须是具体类(不能是接口或 final 类),且子类与父类需在相同包中,或父类具有 public 或恰当的 protected/default 访问权限。
子类能继承哪些成员
子类通过 extends 自动获得父类的以下内容:
- 所有
public和protected字段与方法 - 同包内可见的
default(包访问)成员 - 父类的非私有构造逻辑(但构造器本身不被继承)
注意:父类的 private 成员完全不可见;子类中写 this.privateField 会直接编译失败。若需访问,应通过父类提供的 public/protected getter 方法。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
构造器调用是关键环节
子类实例化时,必须完成父类部分的初始化。Java 要求每个子类构造器第一行必须是:
- 显式调用
super(...)(传入匹配父类构造器的参数),或 - 隐式调用无参
super()(仅当父类存在默认无参构造器时才可行)
如果父类只提供带参构造器,子类构造器又没写 super(...),编译将报错:“Implicit super constructor xxx() is undefined”。这不是警告,而是硬性约束。
单继承与链式结构
Java 不允许一个类 extends 多个父类,例如 class A extends B, C 是非法的。但支持链式继承:
-
Animal→Bird extends Animal→Eagle extends Bird - 此时
Eagle间接继承Animal的所有可访问成员
这种单线层级清晰,避免了多重继承带来的歧义问题,也使类型转换和多态行为更可预测。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










