7.5.8 访问超类被覆写的属性
当属性在某一类型中被重定义时,超类的该属性可以通过使用oclAsType()操作来访问。当我们有一个类A和它的一个子类B,并且A和B都有一个属性 p1 时,我们可以写:
context B inv:
self.oclAsType(A).p1 --访问A中定义的p1
self.p1 --访问B中定义的p1
图7.4展示了一个示例,在此模型片段中,Dependency上的OCL表达式具有歧义:
context Dependency inv:
self.source <> self
因为上述的表达既可以表示继承自ModelElement的普通关联导航,也可以表示作为关联类的导航。这两种导航都使用相同的角色名称,因此总是存在二义性。我们可以使用oclAsType()来对此进行区分:
context Dependency
inv: self.oclAsType(Dependency).source ->isEmpty()
inv: self.oclAsType(ModelElement).source->isEmpty()
图7.4 Accessing Overridden Properties Example