【问题标题】:Does object script supports multiple inheritance?对象脚本是否支持多重继承?
【发布时间】:2017-08-14 16:19:16
【问题描述】:

我是缓存新手,发现了一些与普通 oop 概念不同的东西。在对象脚本中,一个基类可以从多个子类继承(继承顺序可以是左/右)。如果 objectscript 是 oop,我不知道缓存如何支持这一点(不太可能其他编程语言)。

基类

  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",!
   }

  }

输出

我在 Inheritance.TheChildClass

我在 Inheritance.TheChildClass1111111111

【问题讨论】:

  • 那么,问题是什么?至于我,你已经回答了你的问题,你还需要什么。唯一奇怪的是,你如何命名你的课程。您必须有两个类,您将其命名为 ChildClass 和一个继承的类,即 BaseClass。
  • @DAiMor 我的问题是最后一句话“我不知道缓存如何支持这个(不太可能其他编程语言)。”
  • 你是什么意思? “下面发布的缓存是如何支持这一点的”是文档中的广泛解释,除此之外您还有其他问题吗?

标签: intersystems-cache intersystems objectscript


【解决方案1】:

文档清楚地解释了这一点: 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 还继承任何A 未定义的 B 中的类成员,以及 A 和 B 均未定义的 C 中的任何类成员。如果类 B 有一个与已经从 A 继承的成员同名的类成员,则 X 使用来自 A 的值;类似地,如果 C 有一个与从 A 或 B 继承的成员同名的成员,则优先顺序是 A,然后是 B,然后是 C。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-11
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多