gpt4 book ai didi

java - 对象递归调用彼此方法的示例

转载 作者:行者123 更新时间:2023-11-30 08:02:35 26 4
gpt4 key购买 nike

我正在做博士研究,在一次讨论中我提到在 OOP 中,两个对象可能会递归地相互调用。然后我的 friend 问我是否有这样的例子,在更真实的例子(不是人为的例子)中发生了这种情况。

我想不出一个。

不显示构造函数的人工示例的伪代码:

class A
private B b;
void a1() { b.b1(); }
void a2() { print “finished”; }

class B
private A a;
void b1() { a.a2(); }

方法线性化是:

A.a1()  ---->  B.b1()  ----> A.a2()

是否有更真实的示例可以调用两个不同对象的方法?

最佳答案

看看 Smalltalk 如何通过双重分派(dispatch)处理强制转换。

在 Squeak 图片中:

Float>>+ aNumber
"Primitive. Answer the sum of the receiver and aNumber. Essential.
Fail if the argument is not a Float. See Object documentation
whatIsAPrimitive."

<primitive: 41>
^ aNumber adaptToFloat: self andSend: #+

Integer>>adaptToFloat: rcvr andSend: selector
"If I am involved in arithmetic with a Float, convert me to a Float."
^ rcvr perform: selector with: self asFloat

所以如果你执行 1.5 + 3,你发送 + 到 1.5(一个 Float),1.5 发送 adaptToFloat:andSend: 到 3 (一个整数),3 再次将 + 发送到 1.5(第二次使用 3 asFloat 而不是 3)。

不会仅通过两个步骤就将其称为递归,但它与您的示例很接近。

注意:Float>>+中的原语执行失败,以及执行后的Smalltalk代码。

关于java - 对象递归调用彼此方法的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36811921/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com