以前のブログ記事で、オブジェクト指向プログラミングにおいて非常に重要な概念を紹介しました。クラスです。今回は、もう一つの核となる概念について説明します。継承とは、あるクラスが他のクラスの振る舞いを取得できるようにする仕組みのことです。
前回のブログで紹介した “Person “クラスの例を覚えていますか?ここでは学校を想定して、生徒と先生を管理することにします。どちらも人ですが、異なる特性を持っています。そこで、”Teacher” クラスと “Student” クラスを作成し、両方のクラスが “Person” クラスの特性を継承するようにします。
Aクラスを他のクラスからどのように継承するのですか?
新しい Class extendsキーワードが追加され、継承が容易になりました。学校の例で言うと、「Person」クラスを継承した「Student」クラスを作成します。
Class Extends Person
コンストラクタは?
では、コンストラクタについては(「Student」クラスの特定のコンストラクタを定義していない場合)、「Person」クラスのコンストラクタが自動的に呼び出されます。
また、コンストラクタをオーバーライドすることも可能です。例えば「Student」の場合:Personとして名前、苗字、生年月日を持ちますが、Studentは学年と学校も持ちます。このような場合、new Superコマンドを使用すると、親クラスのコンストラクタを呼び出すことができます。そして「Student」コンストラクタの中で、学年と学校に関する特定のコードを追加します。
Class constructor
C_TEXT
// Grade( ) ( ) ( ) ( ) ( ) ( ; ; ) . := $1 // FirstName
C_TEXT$2 // LastName
C_DATE$3 // Birthdate C_TEXT$4 // SchoolName
C_TEXT$5
Super$1$2$3 // Call the "Person" constructor
ThisSchoolName$4
This . :=。Grade$5
関数は?
Student “クラスに固有の関数を追加し、そこから親クラス(”Person”)の関数を呼び出すことができます。
次の例では、生徒の名前、学年、学校名を含む文字列を返す関数を用意しています。Person” クラスには、人物のフルネームを返す関数がすでに用意されています。そこで、この関数を呼び出し、getFullName 、生徒特有の情報を追加します。
Function getIdentity
C_TEXT( ) := . ()+", "+ .の「+」の成績は、「+ .$0
$0SupergetFullNameThisGradeThisSchoolName
メソッドで、”Student” クラスのインスタンスを作成します。親クラスである “Person” からgetFullName 関数を呼び出します。そして、”Student” クラスからgetIdentity 関数を呼び出します。このように、getFullName とgetIdentity の関数の間には、何の違いもありません。
C_OBJECT($s)
$s :=cs.Student.new("Joe"; "Doe";!2002-02-20!; "Waco High School"; "10th")
$name :=$s.getFullName() //return John Doe
$identity :=$s.getIdentity(
) //return Joe DOE, 10th grade in Waco High School