社区
Java SE
帖子详情
普通类实例为什么不能直接调用Object的clone方法
caibird1024
2011-06-30 11:51:09
rt
...全文
751
10
打赏
收藏
普通类实例为什么不能直接调用Object的clone方法
rt
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
caibird1024
2011-06-30
打赏
举报
回复
[Quote=引用 5 楼 alexandertech 的回复:]
Object的clone()被声明为proctected,让你无法从外部调用,其实就是等你为自己的类实现可从外部调用的clone()方法。
JDK并不预知你的自定义类包含有哪些数据及变量,因此最终clone()的实现一定得自力更生。
[/Quote]
protected在子类中应该也是可见的吧?还是我基础知识没掌握好?
caibird1024
2011-06-30
打赏
举报
回复
[Quote=引用 3 楼 sunyiz 的回复:]
如果是你自己的类
那你肯定要自己实现clone()
方法
某些类的clone()的方法可以直接用
那是应为他们的clone()方法已经被实现了
[/Quote]
这我也知道
我纠结饿的是类实例调用object的clone方法eclipse提示The method clone() from the type Object is not visible。clone()方法是protect为什么不可见
飞跃颠峰
2011-06-30
打赏
举报
回复
Object的clone()被声明为proctected,让你无法从外部调用,其实就是等你为自己的类实现可从外部调用的clone()方法。
JDK并不预知你的自定义类包含有哪些数据及变量,因此最终clone()的实现一定得自力更生。
桃园闲人
2011-06-30
打赏
举报
回复
[Quote=引用 3 楼 sunyiz 的回复:]
如果是你自己的类
那你肯定要自己实现clone()
方法
某些类的clone()的方法可以直接用
那是应为他们的clone()方法已经被实现了
[/Quote]
支持!
sunyiz
2011-06-30
打赏
举报
回复
如果是你自己的类
那你肯定要自己实现clone()
方法
某些类的clone()的方法可以直接用
那是应为他们的clone()方法已经被实现了
五哥
2011-06-30
打赏
举报
回复
Object 类的 clone 方法执行特定的克隆操作。首先,如果此对象的类不能实现接口 Cloneable,则会抛出 CloneNotSupportedException。注意:所有的数组都被视为实现接口 Cloneable。否则,此方法会创建此对象的类的一个新实例,并像通过分配那样,严格使用此对象相应字段的内容初始化该对象的所有字段;这些字段的内容没有被自我克隆。所以,此方法执行的是该对象的“浅表复制”,而不“深层复制”操作。
五哥
2011-06-30
打赏
举报
回复
Object 类本身不实现接口 Cloneable,所以在类为 Object 的对象上调用 clone 方法将会导致在运行时抛出异常。
OPPPPOP
2011-06-30
打赏
举报
回复
回帖就有分拿也是吧 哈哈
你不在自己类中重写clone方法 又想调这个类所继承的clone方法的话 jvm就给你扔异常 其实原则上也么啥子问题 只不过人家这么规定了 你就老老实实实现这个接口撒 我记得以前老师再三说 Cloneable只是一个标记接口 它不提供任何方法 也就是他不做啥事 他只是个身份的象征 呵呵 有证好办事哇
caibird1024
2011-06-30
打赏
举报
回复
自己有理解了一下protected的,有点意思
sunyiz
2011-06-30
打赏
举报
回复
想用 clone() 方法
必须自己实现,
即在你自己的类中重写 clone() 方法,并声明为 public
这样才能在外部调用
最后,别忘了实现 Cloneable 接口
Object
的子
类
为什么
不能
调用
clone
()
Object
是所有
类
的父
类
,而
Object
中实现了
clone
()
方法
。那么为什么子
类
中
不能
调用
呢。 这个原因就在于
clone
()是一个protect
方法
。因为protect
方法
只能在当前包或者子
类
中
调用
。而
不能
通过子
类
的
实例
调用
。如果能通过子
类
的
实例
来
调用
的话,那和puplic还有什么区别呢。 ...
关于`
Object
.
clone
()`子
类
不能
调用
的思考
关于
Object
.
clone
()子
类
不能
调用
的思考 我们知道,
Object
.
clone
()这是个被protected修饰符定义的
方法
,而在访问权限修饰表里我们可以看到protected修饰的成员变量或
方法
可以被本包以及这个
类
的子
类
中
调用
访问修饰符 本
类
本包 子
类
其他包 public √ √ √ √ protected √ √ √ × (default) √ √ × × private √ × × × 现在我们来看一个情况,在protected_test包下有两个
类
,一个
Object
类
的
clone
方法
Object
类
的
clone
方法
Object
是所有
类
的基
类
,当你没有显示extends一个父
类
时,编译期会自动为你加上一个
Object
类
。 这是一个native
方法
,说明这个
方法
的实现不是在java中,而是由C/C++实现,并编译成.dll文件,由java
调用
。registerNatives主要是将C/C++的
方法
映射到java中的native
方法
,实现
方法
命名的解耦。了解即可,知道是注册,细...
Java基础深度总结:
Object
类
-
clone
方法
凡心所向,素履所往,生如逆旅,一苇以航。 内容1.
clone
概述2.
Clone
able接口3.
clone
与new的区别4.浅拷贝与深拷贝5.
Object
.
clone
6.浅拷贝存在的问题 1.
clone
概述
clone
() 是
Object
的 protected
方法
,它不是 public,一个
类
不显式去重写
clone
(),其它
类
就
不能
直接
去
调用
该
类
实例
的
clone
()
方法
。 protected native
Object
clone
() throws
Clone
NotSupportedExcept
Java常用
类
---
Object
类
-->
Clone
方法
Object
类
理论上
Object
类
是所有
类
的父
类
,所有
类
都
直接
或间接的继承java.lang.
Object
类
。因此省略了extends
Object
关键字。
Object
类
中具体
方法
如下图所示: 其中,绿色小锁子图标代表该
方法
被定义为final
类
型,故
不能
重写。 补充: 可以通过Alt + 7 快捷键来打开查询一个
类
的结构。 或通过IDEA中View --> Tool Windows --> Structure 来打开,如下图所示。
Clone
方法
Clone
Java SE
62,634
社区成员
307,269
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章