我认为从程序实现角度讲,这样做没有问题。
但在具体的程序设计时,要考虑对象的内部状态问题。一个最简单的重构,就是这样设计A
public class A {
private int a = 0; public void setValue(int a) {
this.a = a;
//do other jobs
}
public int getValue() { return a; }
}如果要改变A实例的状态,需要调用setValue()方法,在setValue()方法你可以与其它类同步状态。这样代码就比较容易控制。
但在具体的程序设计时,要考虑对象的内部状态问题。一个最简单的重构,就是这样设计A
public class A {
private int a = 0; public void setValue(int a) {
this.a = a;
//do other jobs
}
public int getValue() { return a; }
}如果要改变A实例的状态,需要调用setValue()方法,在setValue()方法你可以与其它类同步状态。这样代码就比较容易控制。
class A implements Cloneable {
public int a = 0;
public Object clone() {
try {
return super.clone();
}
catch (CloneNotSupportedException e) {
throw new InternalError(e.toString());
}
}
}
class B {
private A m_a;
public A getM_a() {
return (A) m_a.clone();
}
public void setM_a(A m_a) {
this.m_a = (A) m_a.clone();
}
}
public class AB {
public static void main(String[] args) {
A a = new A();
B b = new B();
a.a = 0;
b.setM_a(a);
A tmp_a = b.getM_a();
System.out.println(tmp_a.a);
a.a = 10;
System.out.println(tmp_a.a);
}
}
当要改变对象的内部状态的时候,这种情况下的处理,在effective java programming一书提到过,像a.a的设计不是不可以,但没有经过良好的封装。应该是private的对象域同非private的访问接口来共同实现。
http://java.sun.com/developer/JDCTechTips/2001/tt0306.html
对于clone的实现,网友们都已实现。另外,对象的克隆有深度克隆和浅度克隆之分。
class A
{
public int a = 0;
} class B
{
private A m_a; public A getM_a()
{
return m_a;
} public void setM_a(A m_a)
{
this.m_a = m_a;
}}public class C
{
public static void main(String[] args)
{
A a = new A();
B b = new B();
a.a = 0;
b.setM_a(a);
A tmp_a = b.getM_a();
System.out.println(tmp_a.a);
a.a = 10;
System.out.println(tmp_a.a); }
}结果是:
0
10
Press any key to continue...还有一种方法: class B
{
private A m_a; public A getM_a()
{
return m_a;
} public void setM_a(A m_a)
{
this.m_a = m_a;
}
public A geta()
{
return new A();
}
class A
{
public int a = 0;
}}public class C
{
public static void main(String[] args)
{
B b = new B();
B.A a = b.geta();
a.a = 0;
b.setM_a(a);
B.A tmp_a = b.getM_a();
System.out.println(tmp_a.a);
a.a = 10;
System.out.println(tmp_a.a); }
}结果是相同的。
这样你认为解决了吗?
A是B的内隐类,不可以直接使用A类,得通过B才可以。我理解的对吗?
小猪笨!~_~ 见笑了!