我是新手,可以缓存并找到与普通oop概念不同的东西。在对象脚本中,可以从多个子类继承基类(继承顺序可以是左/右)。如果objectscript是oop,我不知道缓存是如何支持的(不太可能是其他编程语言)。
BaseClass的
Class Inheritance.TheBaseClass Extends (%RegisteredObject,
Inheritance.TheChildClass, Inheritance.TheChildClass1) [ Inheritance = left ]
{
ClassMethod Init()
{
//do ##class(Inheritance.TheChildClass).Ping()
//do ##class(Inheritance.TheChildClass1).Ping()
do ..Ping()
do ..Pingggg()
}
}
儿童等级1
Class Inheritance.TheChildClass Extends %RegisteredObject
{
ClassMethod Ping()
{
Write "I am in Inheritance.TheChildClass",!
}
}
儿童班2
Class Inheritance.TheChildClass1 Extends %RegisteredObject
{
ClassMethod Ping()
{
Write "I am in Inheritance.TheChildClass1",!
}
ClassMethod Pingggg()
{
Write "I am in Inheritance.TheChildClass1111111111",!
}
}
输出
我在继承.ChildClass
我在继承.ChildClass1111111111
答案 0 :(得分:4)
文档清楚地解释了这一点: http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GOBJ_classes#GOBJ_classes_inheritance
例如,如果类X继承自类A,B和C,则其定义包括:
Class X Extends (A, B, C)
{
}
类编译器的默认继承顺序是从左到右,这意味着超类中成员定义的差异被解析为有利于最左边的超类(在这种情况下,A取代B和C,B取代C. )
具体来说,对于类X,类参数值,属性和方法的值继承自类A(列出的第一个超类),然后从类B继承,最后从类C继承.X也继承任何来自B的A类未定义的类成员,以及来自C的任何A类和B类都未定义的类成员。如果类B具有与已从A继承的成员同名的类成员,则X使用A中的值;类似地,如果C的成员与从A或B继承的成员具有相同的名称,则优先顺序为A,然后是B,然后是C.