Java中extends实现单继承,子类仅继承父类public/protected及同包default成员,不继承private成员、构造器和final类;必须显式调用super()初始化父类,且不可与this()共存。

Java 类的继承通过 extends 关键字实现单继承,子类直接获得父类非 private 的字段和方法,同时必须处理构造器调用、访问权限与重写规则。
extends 基本写法与继承范围
子类声明时在类名后加 extends 父类名,语法明确且只能指定一个类:
- 合法写法:
class Student extends Person - 非法写法:
class Student extends Person, Teacher(编译报错) - 不写 extends 时,默认隐式继承
Object,但不能省略显式继承关系
子类能访问的成员仅限于父类中 public、protected 和同包下的 default(包访问) 成员;private 字段和方法完全不可见,哪怕在同一个文件里也会提示 "Cannot resolve symbol"。
构造器不被继承,但必须调用
父类构造器不会自动传给子类。子类每次创建对象时,JVM 要求其构造器第一行必须完成父类初始化:
立即学习“Java免费学习笔记(深入)”;
- 若父类有无参构造器,子类可不写
super(),编译器会自动插入 - 若父类只有带参构造器(如
Person(String name)),子类构造器必须显式写super("xxx"),否则编译失败 -
super()和this()不能共存于同一个构造器中
例如:Student(long id, String name, String major) { super(id, name); this.major = major; }
方法重写需满足签名一致与权限合规
子类可重写(override)父类的非 static、非 final、非 private 方法,但必须遵守以下约束:
- 方法名、参数类型与顺序、返回类型(支持协变,如父类返回
Object,子类可返回String)必须匹配 - 子类方法的访问权限不能比父类更严格(
public→protected不允许,但反过来可以) - 建议始终加上
@Override注解,让编译器检查是否真为重写,避免误写成重载
注意:static 方法不是重写,而是隐藏(hiding),调用时看引用类型而非实际类型。
哪些内容不能被继承
extends 建立的是“is-a”关系,但它不传递所有东西:
-
构造器:从不被继承,只能通过
super()复用初始化逻辑 - private 成员:子类无法直接访问,需靠父类提供的 public/protected getter/setter 间接使用
-
final 类(如
String、Integer):禁止被继承,写class MyStr extends String直接编译失败 -
接口:不能用 extends 继承接口,要用
implements;类也不能 extends 接口


















