java-显式扩展Object类并调用对象抛出错误的克隆方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-显式扩展Object类并调用对象抛出错误的克隆方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1600字,纯文字阅读大概需要3分钟。
内容图文
我尝试了下面的代码来克隆对象.编译时显示clone受保护,无法访问,但是我扩展了Object类,因此clone方法将对我的类公开.请解释一下原因.
class storeDate extends Object {
public static void main(String[] args)
{
storeDate d = new storeDate();
Object o = (storeDate)d;
o.clone():
}
}
编译时出现此错误
clone()在java.lang.Object中已保护访问
kkk.clone();
解决方法:
这里的关键是这些类属于哪个包.
JLS paragraph 6.6.2中对此进行了解释:
6.6.2 Details on protected Access
A protected member or constructor of an object may be accessed from outside the package in which it is declared only by code that is responsible for the implementation of that object.
例子:
这不会编译:
FILE pkg1 / A.java(对应于您问题中的Object类)
package pkg1;
public class A {
protected void method() {};
}
文件pkg2 / B.java(对应于您的问题中的storeDate)
package pkg2;
import pkg1.A;
public class B extends A {
public static void main(String args[]) {
new A().method();
}
}
javac输出以下内容:
pkg2/B.java:5: method() has protected access in pkg1.A
new A().method();
^
(这与您所拥有的类似:clone()在java.lang.Object kkk.clone();中具有受保护的访问)
只需将B移到pkg1软件包即可解决.
也就是说,它会编译:
文件pkg1 / A.java(不变)
package pkg1;
public class A {
protected void method() {};
}
文件pkg1 / B.java(从pkg2移至pkg1)
package pkg1; // Changed from pkg2
//import pkg1.A; // Not necessary anymore.
public class B extends A {
public static void main(String args[]) {
new A().method();
}
}
因此,您需要什么才能执行诸如new Object().clone()之类的操作?好吧,您将必须属于java.lang软件包(但是,这反过来会导致SecurityException:禁止的软件包名称:java.lang).
内容总结
以上是互联网集市为您收集整理的java-显式扩展Object类并调用对象抛出错误的克隆方法全部内容,希望文章能够帮你解决java-显式扩展Object类并调用对象抛出错误的克隆方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。