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