Cloneable接口是一个空接口,仅用于标记对象,Cloneable接口里面是没有clone()方法,clone()方法是Object类里面的方法,默认实现是一个Native方法。
今天在做对象拷贝的时候发现一个问题
某类实现Cloneable接口后,还要重新实现Object类中的clone()方法:
感觉有点奇怪,这个类里也没做什么特殊的操作啊,就是调用一下父类的clone方法:
这太麻烦了,我们都知道protected的权限范围:
也就是说子类是可以访问protected修饰的方法的。
接下来按照我们的思路写代码实现
1.去掉User类中的clone方法:
接下来直接调用Object类中的clone方法:
这时发现,报错啦!!! 子类实例竟然不能调用父类的clone方法!!!我们会有疑问:Object类是所有类的父类,那么为什么子类不能访问父类protected修饰的方法呢?
其实是因为:“与基类不在同一个包中的子类,只能访问自身从基类继承而来的受保护成员,而不能访问基类实例本身的受保护成员”。这句话是什么意思?不要急,接下来我们用代码详细解释。
所以这里是因为,User类和Object类不同包,导致protected方法访问不了,接下来我们验证一下:
没有错误,可以直接调用父类protected方本文来源gaodai#ma#com搞@@代~&码网^法getA: