clone只能通过super来调用吧?而且你也必须要复写clone方法啊?
解决方案 »
- 安卓UDP未能接收数据包
- 请讲解以下代码的执行过程,看不懂捏
- 为什么客户端只接受了一次 哪位大虾求赐教!
- hashmap和hashtable的 同步和异步 是什么意思???
- 求助!!各位高手!!
- 请问一下逻辑操作(&,|,^)与条件操作(&&,||)的区别???
- 一个Rome Charset like" ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ" 乱码问题,高人牛人路过的人都帮看看
- 自己写的一堆class想弄成一个package,请问java对于package命名有什么规则么?
- 我在xp下安装jdk1.2,安装可以成功,但执行java,javac系统报错
- Sql的一个问题。高手来帮帮我啊!!!!
- 怎么得到一个记录集的行数?
- 有swing组件的窗体,要让焦点响应回车键而转移,除为每个组件,各加监听外,有无其它好方法?
如果不理想
再protected Object clone() {
...
}
A.java:20: clone() has protected access in java.lang.Object
Point1 p1 = p.clone();//
^
A.java:20: incompatible types
found : java.lang.Object
required: Point1
Point1 p1 = p.clone();//第一个错误的原因是:在Object中,clone()方法是protected的,不是public的,只能在类的内部调用,不能在外部调用;第二个错误的原因是:clone()方法的返回值类型是Object,但是在上面的代码中,却直接赋给了Point1类型的p1变量;类型部匹配肯定会出错。在JAVA中要实现clone功能,需要做两件事情:
1.implements Cloneable借口;
2.覆盖Object中的clone()方法;如果你需要在类的外部调用这个方法,需要将这个方法修饰为public.
下面是改进后的代码:class Point1 implements Cloneable
{
int x,y;
Point1(){
x = 10;
y = 20;
}
Point1(int x1,int y1){
x = x1;
y = y1;
}
void print(){
System.out.println("x = "+x+"y = "+y);
}
public Object clone() throws CloneNotSupportedException
{
Point1 p = (Point1)super.clone();
p.x = x;
p.y = y;
return p;
}
};
public class A
{
public static void main(String args[]) throws Exception
{
Point1 p = new Point1();
Point1 p1 = (Point1)p.clone();//在这里要做类型转化
p.print();
p1.print();
}
};