这种情况如何实现?

baquanxunzhang05 2007-12-12 03:11:57
class A{
private int a;
void setA(int a){
this.a=a;
}
int getA(){
return a;
}

class B(
private int b;
void setB(int b){
this.b=b;
}
int getB(){
return b;
}


class C{
void change(B bb,A aa){
aa.setA(bb.getB());
}

change()只是把bb.b现在的值赋给我aa.a
如果以后通过bb.setB()修改bb.b,那也跟aa.a没有关系
有什么办法能,以后通过bb.setB()修改bb.b时,aa.a的值也会跟着变?
...全文
84 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
angues1980 2007-12-12
  • 打赏
  • 举报
回复
嗯,不应该用String举例子
像3楼那样比较好
JhunHoonXZ 2007-12-12
  • 打赏
  • 举报
回复
String好像不行
String对象只能更改引用,不能改引用的池里的数据..
jinxfei 2007-12-12
  • 打赏
  • 举报
回复
再写一个类,比如叫Value,用来保存真实的值。

然后a和b都声明为Value 型变量。


楼上的说法,我觉得也不尽然,看情况。
angues1980 2007-12-12
  • 打赏
  • 举报
回复
更正一下:
首先,这个a和b这两个字段都声明为int型,也就是基本类型,这种类型在java语言中是不能直接作为对象保存的。
所以在不改变类A和B的情况下,除非像上面那样或者挨个赋值,aa跟着变bb变是不可能的。
如果,不是基本类型,比如String,那么在第一次调用change()方法后,就应该可以跟着变了,因为都是指向一个对象。但是这种做法严重不符合封装性的要求,会导致private声名的字段也可以在类外被改变。
angues1980 2007-12-12
  • 打赏
  • 举报
回复
首先,这个a和b这两个字段都声明为int型,也就是基本类型,这种类型在java语言中是不能直接作为对象保存的。
所以在不改变类A和B的情况下,除非像上面那样或者挨个赋值,aa跟着变bb变是不可能的。
如果,不是基本类型,比如String,那么在第一次调用change()方法后,就应该可以跟着变了,因为都是指向一个对象。但是这种做法严重不符合封装性的要求,会导致private声名的字段也可以在方法外被改变。

好的写法应该是:

public XXX getXXX(){
return new XXXX(this.xxx);
}

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧