class foo{
Bar b;
}
class bar{
Class clazz = foo.class;
}
上面的代码片段是否显示了循环依赖关系。类 foo 具有柱类对象的引用。类栏引用了 foo 类本身。
虽然细节可能因您使用的语言而略有不同,但在更纯粹的面向对象术语中,没有。
看看像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
是尾部。如果不是在 clazz 实例变量中引用 Foo 类,而是引用了一个foo instance
,那么你将有一个循环依赖关系图