重写 clone() 方法必须将访问权限改为 public、正确处理 clonenotsupportedexception 异常、显式实现 cloneable 接口,并推荐使用协变返回类型提升安全性与便利性。

重写 clone() 方法必须同时满足访问权限放宽和异常处理两方面规范,否则无法被安全调用或编译失败。
访问权限必须提升为 public
Object 类中 clone() 是 protected 的,子类重写时可且必须改为 public:
- Java 允许重写时访问修饰符更宽松(
protected → public),但不允许更严格 - 若仍保留
protected或降为private,外部类(包括不同包中的调用方)无法访问,失去克隆意义 - 不改权限会导致编译通过但运行时不可用——调用报错“method is not visible”
异常声明必须兼容或合理包装
Object.clone() 声明抛出 CloneNotSupportedException(受检异常),子类重写时需明确应对:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 推荐在方法签名中保留
throws CloneNotSupportedException,由调用方决定捕获或继续上抛 - 也可在方法体内捕获后转为运行时异常(如
throw new AssertionError(...)或RuntimeException),前提是已实现Cloneable接口(此时该异常理论上不应发生) - 不能忽略异常:既不声明也不捕获,编译直接报错;也不能空
catch吞掉异常,会掩盖克隆失败问题
必须实现 Cloneable 接口
Cloneable 是标记接口,无方法,但不可或缺:
- 未实现该接口,哪怕
clone()方法写得再完整,调用super.clone()时仍会抛CloneNotSupportedException - 该接口不可继承:父类实现了,子类仍需显式声明
implements Cloneable,否则 JVM 运行时检查失败 - 仅声明接口不够,必须配合重写的
public clone()方法才构成完整支持
返回类型建议使用协变
提升类型安全性与调用便利性:
- 可将返回类型从
Object改为当前类类型(如Person),避免外部强制转型 - Java 支持协变返回:子类重写方法的返回类型可以是父类方法返回类型的子类型
- 例如:
@Override public Person clone()比public Object clone()更直观、更安全
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










