クラス
Curlでクラスを作成するにはdefine-classを使用します。
{define-class public Person || ここにコンストラクタ、メンバ、メソッド等をコーディング } |
クラスのインスタンス化は、以下のようにします。
let p:Person = {Person} |
コンストラクタ
コンストラクタは、constructorを利用します。また、デフォルトコンストラクタはdefaultという名前で作成します。
{define-class public Person field private _name:String {constructor public {default |
default以外のコンストラクタも複数作成することができます。
{define-class public Person field private _name:String {constructor public {default {constructor public {TestConstructor {let p1:Person = {Person “amori”}} || デフォルトコンストラクタ |
フィールド、ゲッター(getter)、セッター(setter)
フィールドは上記の例の中の_name:Stringのように記載します。
また、ゲッター、セッターをCurlでは定義できます。Java等ではgetName、setNameのような名前でメソッドとして定義するのが通常ですが、Curlではゲッター、セッターをsetter、getterを利用して、定義することができます。
{define-class public Person field private _name:String {getter public {name}:String {setter public {name _name:String}:void {constructor public {default {let p:Person = {Person “amori”}} |
また、getter、setterを簡単に記述するために、以下のサンプルのように、フィールドにアクセサとして記述することができます。
field public-get private-set x:String field public-get package-set y:int field public-get z:bool |
メソッド
メソッドの定義には、methodを利用します。
{define-class public Person field private _name:String {constructor public {default || 戻り値 : Stringのメソッド |
クラスの継承
クラスを継承するには、inheritsを利用します。また、construct-superを利用して、親クラスのコンストラクタをコールすることができます。さらに親クラスのメソッド等をコールするには、superを利用します。
{define-class public Member field _id:int {getter public {id}:int {constructor public {default {let m:Member = {Member 1, “amori”}} |
また、Curlでは多重継承もサポートしております。多重継承をするには、inheritsの中に複数のクラスをカンマ区切りでコーディングします。
{define-class public Child || ……. |
抽象クラス(abstract)
CurlではJavaのようなインターフェースはサポートされていません。ただし、抽象クラスを作成することはできます。(もちろんabstractなメソッド)これを利用するには、修飾子にabstractを指定します。
{define-class public abstract AbstractPerson {method public abstract {toString}:String } |
アクセス属性
Curlのアクセス属性は、public、private、package、protectedを指定できます。それぞれの説明は以下のとおりです。
public | 全コードがメソッドを呼び出すことができることを示します |
package | 同じパッケージ内のコードのみがメソッドを呼び出すことができることを示します(デフォルト) |
protected | 同じパッケージ内のコードまたはサブクラス内のコードのみがメソッドを呼び出すことができることを示します |
private | 同じクラス内のコードのみがメソッドを呼び出すことができることを示します |
アクセス属性「library」
バージョン7からlibrary属性を付与できるようになりました。これは同じマニフェスト内ではpublicのような動きをし、違うマニフェストからはpublicとしてアクセスできないというものです。これにより、ライブラリなどで内部的にはパッケージ間で利用したいが、外部公開したくない場合にやくにたちます。(これはJava7のmoduleのような機能)
詳細は、こちらを参照ください。