JavaScript Diary

JavaScript を先取る2 [ 2001/09/17 ]
前回の続きです。今回は以下の語について説明します。
abstract, implements, extends, class, final, public

class : クラスを宣言するときに使用
extends : 継承するときに使用
implements : インターフェースの組み込み
abstract : 抽象クラスを定義するときに使用。
final : サブクラスが作れないクラスを宣言
public : クラスの使用できる範囲

JavaScript ではクラスも関数も function で片付けられますが、将来はクラスにはきちんと class を付けて宣言することになると思われます。例えば以下のプログラム。
function MyClass( p0 ){
    this.prop = p0 ;
}
これは MyClass はクラスで、コンストラクタも同時に定義し、メンバもその中で定義、処理しています。ですが↓のようになります(いや、例えばの話ですよ!)。
class MyClass{ // クラスの宣言
    int prop ; // メンバの宣言
    MyClass( int p0 ){ // コンストラクタ
        prop = p0 ; // 初期化
    }
}
extends は継承したいときに使用します。JavaScript で書くと
SubClass.prototype = new SuperClass ;
が、
class SubClass extends SuperClass{ ... }
となります。「SubClass は SuperClass を継承する」という意味です。
implements について、インターフェースは本体のないメソッド(抽象メソッド)定義と定数の集合です。クラス階層上離れたところにあるクラスに共通の振る舞いや状態を持たせたいときに使用します。Javaでは多重継承が許されないため、この機能を使用して補うことも出来ます。
final は説明の通りで、そのクラスは継承させたくない(する必要がない)ときに使用します。
final class MyClass{ ... }
ちなみに、JavaScript1.2(?) では、Math クラスと String クラスは継承できません。

abstract は抽象クラスを定義するときに用います。抽象クラスとはサブクラスに共通する機能をまとめたクラスで、インスタンスを生成することができません。例えば「こういうメンバがありますよ」とだけ宣言しておいて実際の処理や値はサブクラスで行うことになります。
JavaScript でこれを実装することは出来ませんが、ちょっとした真似事を TrashLayer Font 2 でしています。この場合、FontData クラスが抽象クラスで Font67 クラスがそれを継承したサブクラスとなります(自己満足なので見なくて結構です。笑)。

public はクラスの使える範囲を指定します。これはパッケージというものを知っていなければいけませんが、public を付けるとどこからでもそのクラスを参照出来るということです。

さて、次回は実装を切望するアクセスレベル+修飾子についてです。