基于面向对象编程思想,因为所有类都具备相同的方法,所以把共同的方法抽取到Object类当中, Object类就是Java中的所有类的超类。无论是sun公司提供的类还是程序员自定义的类Java都隐式的继承了Object类,下面让我们来逐一分析该类的方法以及注意事项:
clone()方法:创建并返回此对象的一个副本。返回Object.
问题: 如下代码:
packagecom.itcast.itheima;
publicclass CloneTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Table table = new Table();
table = (Table) table.clone();
}
}
//定义表类
classTable{
}
为什么table.clone()编译不过呢?
分析:
1.首先先了解一下clone()方法的作用,提到这个方法就不得不说一下23种设计模式之一 ---- 原型模式,什么是原型模式呢?顾名思义就是创建一个和原来一模一样的新对象。例如:日常开发中经常用到的复制功能,用户建立一张财务凭证后,以后会有类似的凭证,只是金额要修改,其他内容都相同,此时用户就没有必要重新将凭证的内容逐一输入。只需复制一下即可。
2.通过API文档查询要使用该方法就的对象必须实现Cloneable的接口,Cloneable接口里面什么方法都没有定义,是一个标示接口,类似于java.io.Serializable。否则会报CloneNotSupportedException异常,前面的编译不通过是因为该方法默认的修饰符是protected的,所以必须覆盖把修饰符修改成public的.
修改以上代码如下:
package com.itcast.itheima;
public class CloneTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Table table = new Table();
table = (Table) table.clone();
}
}
//定义表类
class Table implementsCloneable{
publicObject clone(){
Objectobj = null;
try {
obj = super.clone();
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return obj;
}
}