先上代码:
public class Person implements Cloneable{
private String name;
private int gender;
public Person(String name, int gender) {
this.name = name;
this.gender = gender;
}
public String toString(){
String s = this.name+" "+this.gender;
return s;
}
public Person clone() throws CloneNotSupportedException{
return (Person)super.clone();
}
static class TestMain{
public static void main(String[] args) throws CloneNotSupportedException{
Person p1 = new Person("zs",0);
Person p2 = p1.clone();
System.out.println(p2);
}
}
}输出:
zs 0
我的问题是:
public Person clone() 中 调用的super.clone(),super应该指代的是父类引用,而Person的父类应当是 Object类型 也就是说我调用的是Object 的clone的方法,但是这样的方法怎么能返回一个子类的类型,更何况 子类的Field还是private类型。
是super类型除了指代父类引用 还是其他的含义,还是java中一些其他的特殊的机制
Java类对象
public class Person implements Cloneable{
private String name;
private int gender;
public Person(String name, int gender) {
this.name = name;
this.gender = gender;
}
public String toString(){
String s = this.name+" "+this.gender;
return s;
}
public Person clone() throws CloneNotSupportedException{
return (Person)super.clone();
}
static class TestMain{
public static void main(String[] args) throws CloneNotSupportedException{
Person p1 = new Person("zs",0);
Person p2 = p1.clone();
System.out.println(p2);
}
}
}输出:
zs 0
我的问题是:
public Person clone() 中 调用的super.clone(),super应该指代的是父类引用,而Person的父类应当是 Object类型 也就是说我调用的是Object 的clone的方法,但是这样的方法怎么能返回一个子类的类型,更何况 子类的Field还是private类型。
是super类型除了指代父类引用 还是其他的含义,还是java中一些其他的特殊的机制
Java类对象
解决方案 »
- SSH框架里用SQL查出的Object对象不能转化为映射类是为什么啊
- 求人帮我分析OA的表
- ssh2项目中,实现加载项目时将数据库中内容加载到servletContext中的问题...各位大人帮帮忙
- 急求!!
- hibernate和数据库的设计问题,急急!
- 用eclipse3.3能直接开发JSF吗
- JSP 编译问题 2 这是修改后的,小女谢过了!在线等!!!!!!!!!!!!!!!!!!!!!!!!!
- 为何javac Test.java不能编译???(急)
- java中 gson与泛型的问题,求大神指点
- maven多模块项目怎么使用eclipse git插件上传到远程仓库
- Java面试----问题
- Struts2,访问loginA.action报404
protected native Object clone() throws CloneNotSupportedException;
说明这是一个本地方法,所以java语言带来的限制,或许它可以突破第二、父类的方法并非不可以访问子类的字段与方法,当你调用super.clone()的时候,是把当前这个对象作为this传给父类的,java的类型是动态绑定的,所以传给父类的this并没有变成Object类实例,它仍然是Person类实例,所以父类的clone()函数接收到的this并没有被“阉割”成Object第三、java的private之类的访问控制符,只是对正常的程序流程有用。但别忘了反射,通过反射你是可以控制类的结构的,你也可以在运行时通过反射把private变成public。
并且java还有一个重要的东西,那就是序列化,它可以直接无视一切。通过序列化然后反序列化,你可以克隆一个对象