关键不是“拿过来用”,而是“按契约协作”。java继承中安全复用父类功能需尊重访问控制:仅public/protected成员可被继承,private成员不可见;应通过super显式委托而非复制或反射;重写须遵守契约(权限不缩、异常不扩、返回协变);字段隐藏非覆盖,访问需明确使用super.fieldname。

关键不是“拿过来用”,而是“按契约协作”。Java 继承中真正安全复用父类功能的方式,是尊重访问控制、明确调用意图、避免绕过封装边界。
只访问非私有成员:public/protected 才算真正继承
父类的 private 成员(字段或方法)不会被子类继承——不是“隐藏了”,而是编译器根本不让子类看到。试图直接写 this.privateField 或 super.privateMethod() 会报错 cannot find symbol。
- 能用的只有 public 和 protected 成员,它们构成父类对外公开的行为契约
- 默认包级访问(不写修饰符)的成员,仅在同包子类中可用
- 如果父类只提供 private + public 包装方法(比如
getValue()),子类就该通过这些 public 方法间接使用,而不是想办法“突破”
调用父类逻辑:用 super 显式委托,而非复制或反射
当子类需要扩展而非替换父类行为时,应在自己的方法里用 super.methodName() 主动调用,把控制权交还给父类实现。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 例如父类有
save()做数据持久化,子类想加事务控制:先beginTransaction(),再super.save(),最后commit() - 这比把父类方法体复制到子类里更安全——父类逻辑更新后,子类自动受益
- 禁止用反射强行访问 private 方法,那等于破坏封装契约,会导致维护困难和运行时风险
重写要守规矩:覆盖 ≠ 覆盖一切
@Override 不是“自由发挥许可证”。重写必须遵守父类定义的契约:
- 访问权限不能变窄(
public父类方法不能重写为protected) - 异常声明不能扩大(父类抛
IOException,子类不能抛Exception) - 返回类型需协变(可返回子类型,但不能换掉整个类型体系)
- final 方法不能重写——这是父类明确声明“此处不可定制”的信号,应尊重
字段别遮盖,要用就明说
子类定义同名字段不会覆盖父类字段,而是**隐藏**它。这容易引发歧义:父类方法内部仍用自己那份字段,而子类代码用的是另一份。
- 若真需扩展状态,优先考虑新增字段(如
extraInfo),而非重名覆盖 - 若必须访问父类同名字段,用
super.fieldName(前提是它不是 private) - 字段本身不具备多态性——用父类引用访问时,取的是父类字段值;用子类引用,取的是子类字段值。这点和方法完全不同,务必分清
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










