小弟自学JAVA ,问个两个类互相关联的问题

kaiseer8828 2014-01-10 06:27:45
问题是如果 A 需要调用B 中的方法,B也要调用A中的方法怎麽办?
是不是这样:
class A {
B b;
setB(B);
}

class B {
A a;
setA(A);
}

main(){
A a = new A;
B b = new B;
a.setB(b);
b.setA(a);
}

语法简写了

可是耦合性很强啊,众大神有没有什么解耦的良策啊。
求赐教。
...全文
1251 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenhao237 2014-01-24
  • 打赏
  • 举报
回复
搞这么复杂,写成一个类不行吗
kaiseer8828 2014-01-24
  • 打赏
  • 举报
回复
引用 27 楼 LY_0199 的回复:
A调用B,B调用A .. 直接写一个类里面不就好了么...
所以写到一个server 里了
剑在手跟我走 2014-01-24
  • 打赏
  • 举报
回复
A调用B,B调用A .. 直接写一个类里面不就好了么...
漏扫老司机 2014-01-23
  • 打赏
  • 举报
回复
顶一下
kaiseer8828 2014-01-23
  • 打赏
  • 举报
回复
引用 21 楼 cctv_101 的回复:
刚考完研,准备把java重新拾起来,虽然以前也是自学的~ 我说下我的看法~不对请指正。 从底层的微程序到现在的外部网路,思想都是互相引用的。譬如说,最经典的分层结构,系统的设计从无模块到模块 再到分层,而网络其实也是分层设计的思想。 你说这两个互相关联的问题,现在来说这样设计不大恰当,以前是有这个问题。譬如当初设计系统时,模块之间确实存在互相调用,导致不知道到底谁是基层,谁是高层,或者说主次不分的情况,所以有了耦合度说法。这是模块设计带来的问题。 不如借鉴下系统的设计思想。这两个类都是关联的,或者都用到对方的某一功能,完全可以抽象出一个共性,作为接口或者父类,采用继承的方式来实现功能,接口无非是为了屏蔽外部的差异,而父类则是解决内部的无序问题。 苹果和菠萝都能吃,但吃法不同,而水果也能吃,但却是个抽象的,水果本身就是抽象的实体。在设计苹果类和菠萝时,我们是不是可以实现水果这个接口,再定义自己自己的吃法,当我们定一个水果对象时,不论你是苹果还是菠萝,我都能new 。 interface fruit{ eat(); } class A implements fruit{ eat(){直接吃} } class AC implements fruit{ eat(){剥皮吃} } 随便建个主函数调用 { fruit fr1=new A(); fruit fr2=new AC(); 都调用吃,但吃的方法不同 } 父类也是如此,差异不大。 我们不知道你是要实现啥功能,这是其一吧,还有可能如楼上所说的组合功能。组合功能那也是在第三方中来实现的,没必要互相引用,除非你设计错了。
你说的有点像策略模式,但策略模式是把接口写到类内,而不是继承,因为可以动态改变。 其实这几天我已找到一种解决这个问题的方法, 就是把model 分成实体和server ,其实这种四层架构就已经可以解决我问的问题了,但是我隐约的感觉可能也有一些缺点,但我还没想到
yangzhiyong1314 2014-01-23
  • 打赏
  • 举报
回复
看一下java 自己写的回调方法
lxq_xsyu 2014-01-23
  • 打赏
  • 举报
回复
引用 21 楼 cctv_101 的回复:
刚考完研,准备把java重新拾起来,虽然以前也是自学的~ 我说下我的看法~不对请指正。 从底层的微程序到现在的外部网路,思想都是互相引用的。譬如说,最经典的分层结构,系统的设计从无模块到模块 再到分层,而网络其实也是分层设计的思想。 你说这两个互相关联的问题,现在来说这样设计不大恰当,以前是有这个问题。譬如当初设计系统时,模块之间确实存在互相调用,导致不知道到底谁是基层,谁是高层,或者说主次不分的情况,所以有了耦合度说法。这是模块设计带来的问题。 不如借鉴下系统的设计思想。这两个类都是关联的,或者都用到对方的某一功能,完全可以抽象出一个共性,作为接口或者父类,采用继承的方式来实现功能,接口无非是为了屏蔽外部的差异,而父类则是解决内部的无序问题。 苹果和菠萝都能吃,但吃法不同,而水果也能吃,但却是个抽象的,水果本身就是抽象的实体。在设计苹果类和菠萝时,我们是不是可以实现水果这个接口,再定义自己自己的吃法,当我们定一个水果对象时,不论你是苹果还是菠萝,我都能new 。 interface fruit{ eat(); } class A implements fruit{ eat(){直接吃} } class AC implements fruit{ eat(){剥皮吃} } 随便建个主函数调用 { fruit fr1=new A(); fruit fr2=new AC(); 都调用吃,但吃的方法不同 } 父类也是如此,差异不大。 我们不知道你是要实现啥功能,这是其一吧,还有可能如楼上所说的组合功能。组合功能那也是在第三方中来实现的,没必要互相引用,除非你设计错了。
21楼说的很对,如果真有这样调用,只能说明一个问题,你的设计有问题,同一个问题可以用不同的方法实现,你这样看似是面向对象,实际上则不全是,没有正确的抽象。
思考足迹 2014-01-21
  • 打赏
  • 举报
回复
刚考完研,准备把java重新拾起来,虽然以前也是自学的~ 我说下我的看法~不对请指正。 从底层的微程序到现在的外部网路,思想都是互相引用的。譬如说,最经典的分层结构,系统的设计从无模块到模块 再到分层,而网络其实也是分层设计的思想。 你说这两个互相关联的问题,现在来说这样设计不大恰当,以前是有这个问题。譬如当初设计系统时,模块之间确实存在互相调用,导致不知道到底谁是基层,谁是高层,或者说主次不分的情况,所以有了耦合度说法。这是模块设计带来的问题。 不如借鉴下系统的设计思想。这两个类都是关联的,或者都用到对方的某一功能,完全可以抽象出一个共性,作为接口或者父类,采用继承的方式来实现功能,接口无非是为了屏蔽外部的差异,而父类则是解决内部的无序问题。 苹果和菠萝都能吃,但吃法不同,而水果也能吃,但却是个抽象的,水果本身就是抽象的实体。在设计苹果类和菠萝时,我们是不是可以实现水果这个接口,再定义自己自己的吃法,当我们定一个水果对象时,不论你是苹果还是菠萝,我都能new 。 interface fruit{ eat(); } class A implements fruit{ eat(){直接吃} } class AC implements fruit{ eat(){剥皮吃} } 随便建个主函数调用 { fruit fr1=new A(); fruit fr2=new AC(); 都调用吃,但吃的方法不同 } 父类也是如此,差异不大。 我们不知道你是要实现啥功能,这是其一吧,还有可能如楼上所说的组合功能。组合功能那也是在第三方中来实现的,没必要互相引用,除非你设计错了。
cxyy_ 2014-01-20
  • 打赏
  • 举报
回复
用A继承B,然后在B中写范例方法,是不是可以实现相互调用呢。
wyfteam123 2014-01-20
  • 打赏
  • 举报
回复
public class B extends A{}
palm008 2014-01-20
  • 打赏
  • 举报
回复
用反射吧,把这种依赖关系配置到文件中,我只知道这么多。
kaiseer8828 2014-01-16
  • 打赏
  • 举报
回复
引用 15 楼 dailuwen 的回复:
这样就是只要new出C类就OK,要调用A、B两个类的方法的时候,只要用c.A或c.B来得到。这其实就是相当于弄个第三方类来进行操作和管理嘛,不知道是不是这么个意思
我是这样理解的, 可是大神说 好像不是这个意思,我也不知道了,等大神回复吧
kaiseer8828 2014-01-16
  • 打赏
  • 举报
回复
感觉理解大神的意思了,貌似web开发是用不到,互相嵌套调用的方式
你好毒你好毒 2014-01-14
  • 打赏
  • 举报
回复
引用 11 楼 kaiseer8828 的回复:
[quote=引用 10 楼 MrsFeng 的回复:] [quote=引用 9 楼 kaiseer8828 的回复:] [quote=引用 8 楼 MrsFeng 的回复:] 这种情况一般不会出现,即使出现的话那也是A、B同时被C组合由C来调度A、B的方法。如LZ说的如果A、B之前相互调用如果出现线程安全问题也是很容易造成死锁的~~
大神你的意思是 1. class C { A a; B b; .... } 还是 2. class A { C c; } class B{ C c; } 把A B中set入同一个c对象[/quote] C是对的,A和B就不需要C了,试问两者之间互调的目的何在[/quote] 大神还有一个问题,首先我没理解错的话你的意思是第一种是正确的吧;第二,那我给这个包含A ,B 的类C 起什么名字呢,会不会有莫名奇妙多出来一个类,完全就起一个方便开发的作用而和要模拟的真实世界中对象完全对应不上的感觉。 [/quote] 我的意思是说你说的那种情况不可能出现
  • 打赏
  • 举报
回复
为什么会出现这种情况???
戴子 2014-01-14
  • 打赏
  • 举报
回复
这样就是只要new出C类就OK,要调用A、B两个类的方法的时候,只要用c.A或c.B来得到。这其实就是相当于弄个第三方类来进行操作和管理嘛,不知道是不是这么个意思
查看余e 2014-01-14
  • 打赏
  • 举报
回复
能有具体的例子吗 这么说很不好想啊
poooll 2014-01-13
  • 打赏
  • 举报
回复
就是这样。还能怎么简写。
你好毒你好毒 2014-01-13
  • 打赏
  • 举报
回复
引用 9 楼 kaiseer8828 的回复:
[quote=引用 8 楼 MrsFeng 的回复:] 这种情况一般不会出现,即使出现的话那也是A、B同时被C组合由C来调度A、B的方法。如LZ说的如果A、B之前相互调用如果出现线程安全问题也是很容易造成死锁的~~
大神你的意思是 1. class C { A a; B b; .... } 还是 2. class A { C c; } class B{ C c; } 把A B中set入同一个c对象[/quote] C是对的,A和B就不需要C了,试问两者之间互调的目的何在
kaiseer8828 2014-01-13
  • 打赏
  • 举报
回复
引用 8 楼 MrsFeng 的回复:
这种情况一般不会出现,即使出现的话那也是A、B同时被C组合由C来调度A、B的方法。如LZ说的如果A、B之前相互调用如果出现线程安全问题也是很容易造成死锁的~~
大神你的意思是 1. class C { A a; B b; .... } 还是 2. class A { C c; } class B{ C c; } 把A B中set入同一个c对象
加载更多回复(7)

81,091

社区成员

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

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