学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
轻松建立自己的群组,招兵买马   
发新话题
打印

使用clone方法报错

使用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();
                                 ^

TOP

stringbuffer 没有clone方法
学习需要安静。。海盗要重新来过。。

TOP

谢谢
[url=http://www.netyi.net/in.asp?id=jmasm]免费视频资源下载[/url]

TOP

发新话题