メインコンテンツまでスキップ
バージョン: 開発中

Super

Super {( param {; param2 ; ... ; paramN} )} -> 戻り値

引数説明
paramMixed🡒親コンストラクターに渡す引数
戻り値オブジェクト🡐オブジェクトの親

説明

Super コマンドは、スーパークラスへの呼び出しを行います。

Super は二つの目的のために導入されました:

  • コンストラクターコード内においては、Super はスーパークラスのコンストラクターを呼び出すためのコマンドです。コンストラクター内で使用された場合、Super コマンドは単独で使用され、This キーワードが使用される前に使用されていなければなりません。
    • 継承ツリー内の全てのクラスコンストラクターが適切に呼ばれていないと、エラー-10748 が生成されます。4Dデベロッパーは全ての呼び出しが有効かどうかを検証する責務があります。
    • This コマンドが、まだスーパークラスがコンストラクトされていないオブジェクトに対して呼び出された場合、エラー-10743 が生成されます。
    • Super がオブジェクトスコープ外から呼び出された場合、またはスーパークラスのコンストラクターが既に呼び出されているオブジェクトに対して呼び出された場合、エラー-10746 が生成されます。
  // myClass コンストラクター内
 var $1;$2 : Text
 Super($1) //テキスト引数でスーパークラスコンストラクターを呼び出す
 This.param:=$2 // 二つ目の引数を使用する
  • クラスメンバーファンクション内においては、Super はスーパークラスのプロトタイプを指定し、スーパークラス階層のファンクションを呼び出すことを可能にします。
 Super.doSomething(42) //スーパークラス内で宣言された"doSomething" ファンクションを呼び出す

例題 1

以下の例題はクラスコンストラクター内部のSuper の使用例を紹介しています。このコマンドは、Rectangle クラスとSquare クラスで共通しているコンストラクター部分の重複を避けるために呼び出されています。

  //Class: Rectangle
 
 Class constructor
 var $1;$2 : Integer
 This.name:="Rectangle"
 This.height:=$1
 This.width:=$2
 
 Function sayName
 ALERT("Hi, I am a "+This.name+".")
 
 Function getArea
 var $0 : Integer
 $0:=This.height*This.width
  //Class: Square
 
 Class extends Rectangle
 
 Class constructor
 var $1 : Integer
 
  // Rectangle の幅と高さとして提供された長さで
  // 親クラスコンストラクターを呼び出す
 Super($1;$1)
 
  // 派生したクラスにおいては、
  // Super は'This' を使用する前に呼び出されていなければならない
 This.name:="Square"

例題 2

以下の例ではクラスメンバーメソッド内においてのSuper の使用法を紹介しています。

ファンクションを持ったRectangle クラスを作成した場合を考えます:

  //Class: Rectangle
 
 Function nbSides
 var $0 : Text
 $0:="I have 4 sides"

また、スーパークラスファンクションを呼び出すファンクションを持つSquare クラスを作成したとします:

  //Class: Square
 
 Class extends Rectangle
 
 Function description
 var $0 : Text
 $0:=Super.nbSides()+" which are all equal"

その後、プロジェクトメソッド内において以下のように書くことができます:

 var $square : Object
 var $message : Text
 $square:=cs.Square.new()
 $message:=$square.description() // "I have 4 sides which are all equal" が格納される

参照

cs
This