关于引用传递/继承,解决问题,立即结贴
class A
{
...
}
class B extends A
{
....
}
class C extends A
{
....
}
已知B和C拥有完全相同的属性和方法
B b=...;
C c=new C();
请问,如何才能把b对象的属性全部赋给c?
一个一个的赋值太麻烦,能否考虑采用引用传递?
该怎样解决?谢谢!
问题点数:40、回复次数:10Top
1 楼zsz2000()回复于 2002-11-20 15:43:02 得分 0
你应该把相同的属性和方法放到A中Top
2 楼beyond_xiruo(CorruptionException)回复于 2002-11-20 16:08:18 得分 20
B b=new B();
C c=(C)b.clone();
用clone试试Top
3 楼lci21(元戈)回复于 2002-11-20 16:24:18 得分 0
问:
如果B和C的属性有所不同,怎么办?Top
4 楼study_body(珍惜每一天)回复于 2002-11-20 16:26:57 得分 0
完全相同为什么还用两个呢?
Top
5 楼lci21(元戈)回复于 2002-11-20 16:46:23 得分 0
因为是由两个数据表生成的数据对象,这两个表字段相同,一个表是存放临时信息,另一个存放永久数据Top
6 楼title(桶漆底脱)回复于 2002-11-20 17:03:26 得分 10
当然是用clone了,用发楼上的说了。clone是拷贝变量所有值包括类的内部变量值。copy也可以拷贝,但是区别就是只能以初始化的形式创建要实现的类。Top
7 楼ilka()回复于 2002-11-20 19:19:21 得分 10
别忘了
class B extends A implements Cloneable
{
Object o = null;
public Object clone()
{
try{o = super.clone();}catch(CloneNotSupportedException e){}
}
return o;
}Top
8 楼ilka()回复于 2002-11-20 19:23:53 得分 0
如果两张表的数据永远是一样的,只需有B,C没有存在价值。
如果两张表的数据不是永远一样的,用clone(),千万不要用引用传递,那会导致,B,C永远是一样的。Top
9 楼ilka()回复于 2002-11-20 19:25:44 得分 0
在编程是要注意:
尽量在同一时刻,不要存在两个reference指向同一个对象。
Top
10 楼lci21(元戈)回复于 2002-11-21 09:19:16 得分 0
现在突然发现,两张表的主键字段名不同(导致由这两张表生成的数据对象类有一个属性不同,其余都相同),问是否还能用clone方法,别的有没有简便的方法?Top




