java中深拷贝,super.clone() 为什么是调用 super()(即父类)的 clone() 方法?它跟 super() 构造器调用有啥关系?

🔷 一、super.clone() 并不是调用构造器 super()

它不是在调用构造函数 super(),而是调用父类的 clone() 方法!

对比说明:

表达式含义
super()调用父类的构造函数,用于创建对象。只能在构造器里使用。
super.clone()调用父类的 clone() 方法,是方法调用,跟构造器无关。

🔷 二、为什么 super.clone() 是必须的?

Java 中 Object.clone() 的默认行为:

  • 所有类的祖先 java.lang.Object 有一个 protected Object clone() 方法。

  • 这个方法做了以下事:

    • 直接创建一个当前对象的浅拷贝
    • 不会调用构造函数(这是关键!)
    • 它是通过内存复制实现的,而不是通过 new 和构造函数。

🔷 三、那为什么用 super.clone() 而不是 new MyClass()

原因是:clone() 是 Java 的一种特殊对象复制机制,它跳过了构造器的调用。

如果用 new

MyClass copy = new MyClass(); // 会调用构造器
  • 会导致你必须手动设置所有字段;
  • 构造器可能有副作用,逻辑复杂;
  • 不符合“复制一个已有对象”的语义。

🔷 四、层层调用机制(继承中的 super.clone()

当你写:

super.clone()

实际调用的是:

  • 当前类的父类的 clone() 方法;
  • 这个过程可以一直向上追溯,最终调用 Object.clone()
  • Object.clone()native 方法,在底层通过内存操作复制对象,不经过构造器。

✅ 总结

内容
super.clone() 是什么?是调用父类的 clone() 方法,不是构造函数
super() 构造器有关系吗?没有任何关系
为什么用 super.clone()为了利用 Java 内置的对象浅拷贝机制,不调用构造器,直接复制已有对象
哪个方法最终执行拷贝?Object.clone()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值