荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: heiheihei (瓦尔特), 信区: Java
标  题: java手记(10)--消除克隆能力
发信站: 荔园晨风BBS站 (Sat Nov 24 19:03:58 2001), 转信

java手记(10)--消除克隆能力
                                            瓦尔特
应该提到的是,克隆的特性是可以继承的。当然了,前提是继承以后生成的类不能添加新
的对象成员。如我们可以引用手记(9)中的Deep类进行继承:
class MyDeep extends Deep{
    int i;
    //Integer x=new Integer(10);//如果添加上此句,则又不能进行深度克隆了。
}
鉴于以上特点,我们又面临另外一个问题:如何消除类的克隆能力,因为我并不一定希
望所有的类都可以被克隆。首先能够想到的就是使用CloneNotSupportedException。
class NoMore implements Cloneable{
    public Object clone()
    throws CloneNotSupportedException{
        throw new CloneNotSupportedException;
    }
}
这样NoMore类在调用clone()方法时就会自动throw一个CloneNotSupportedException。
但这并没有结束,因为该类其实并没有丧失克隆的能力。使用下面的方法就可以对NoMo
re类进行克隆。
Class GoOn extends NoMore{
    Private GoOn make(GoOn g){
        Return new GoOn();
    }
    public Object clone(){
        return make(this);
    }
}
因此我们还要使得NoMore类丧失被继承的能力,也就是使用final关键字。
final class NoMore implements Cloneable{
    public Object clone()
    throws CloneNotSupportedException{
        throw new CloneNotSupportedException;
    }
}
                                瓦尔特学自thinking in java
--

世界上没有任何话能说服你,除非它是你心中的那一句。

世界上没有任何人能打动我,除非她是我心中的那一个。

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 202.118.1.82]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店