class foo{
Bar b;
}
class bar{
Class clazz = foo.class;
}
以上代码段是否显示循环依赖关系。类foo具有bar类对象的引用。类栏引用了foo类本身。
答案 0 :(得分:1)
虽然细节可能会略有不同,具体取决于您使用的语言,但在更纯粹的面向对象术语中,没有。
查看像Ruby这样受Smalltalk启发的语言可能会有所帮助,看看情况如何:
class Foo
def initialize()
@b = Bar.new()
end
def what_is_b() # instance method can call class method who
@b.who()
end
def who()
"foo instance"
end
def self.who() # class method can't call instance method what_is_b
"foo class"
end
end
class Bar
def initialize()
@clazz = Foo
end
def what_is_clazz()
@clazz.who()
end
def who()
"bar instance"
end
def self.who()
"bar class"
end
end
f = Foo.new()
puts f.who()
puts f.what_is_b()
puts " and "
b = Bar.new()
puts b.who()
puts b.what_is_clazz()
输出:
foo instance
bar instance
and
bar instance
foo class
这表明foo instance
有一个bar instance
,bar instance
有一个foo class
。在纯OO中,foo class
是foo instances
的工厂,类方法不能引用实例方法,但反之亦然,因此foo instances
可以依赖于foo class
但不是foo instance
反过来说。
所以在这个人为的例子中,foo class
是依赖树的头部,而foo instance
是尾部。如果不是在clazz实例变量中引用Foo类而引用了{{1}},那么您将拥有循环依赖图