| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 521 人关注过本帖
标题:使用clone方法报错
取消只看楼主 加入收藏
jmasm
Rank: 1
等 级:新手上路
威 望:1
帖 子:368
专家分:0
注 册:2006-9-24
收藏
 问题点数:0 回复次数:1 
使用clone方法报错
//不要直接返回可变对象的引用,如果这样,就违反了封装的原则.
//没起到保护作用.私有对象的内容可能会被更改.
//如果需要返回一个可变对象的引用,应该对它进行clone后,返回clone后的引用.
class  People
{
    private StringBuffer name;
    public People(String n)
    {
        name=new StringBuffer(n);
    }
    public StringBuffer getName()
    {
        return name;
    }
    public StringBuffer getName1()
    {
        return (StringBuffer)name.clone();
    }
    public void show()
    {
        System.out.println(name);
    }
}
public class PeopleTest
{
    public static void main(String[] args)
    {
        People p=new People("李四");
        StringBuffer sb=p.getName();
        sb.append("好");  //people的私有数据在对象外被更改
        p.show();
        
        People p1=new People("张三");
        StringBuffer sb1=p.getName1();
        sb1.append("好");  //返回的是克隆后的引用,所以这里的修改对类中成员没有影响
        p1.show();
    }
}

---------- javac ----------
PeopleTest.java:17: clone() 可以在 java.lang.Object 中访问 protected
        return (StringBuffer)name.clone();
                                 ^
搜索更多相关主题的帖子: clone 
2008-05-21 09:49
jmasm
Rank: 1
等 级:新手上路
威 望:1
帖 子:368
专家分:0
注 册:2006-9-24
收藏
得分:0 
谢谢
2008-05-21 16:15
快速回复:使用clone方法报错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025682 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved