ISO2002MF 

クラス名段落

クラス名段落は、この見出し部がクラス定義を導入していることを示し、クラスを示す名前を指定し、クラスにクラス属性を割り当てる。

一般形式

Class-ID

指令

  1. 予約語リストのフラグ設定および修正を行うコンパイラ指令に加えて、以下の指令が、本セクションに記載の構文または意味内容に影響を与える可能性がある。
    • ACTUAL-PARAMS - パラメーター化されたクラスまたはインターフェイスからクラスを作成する際に使用するパラメーターを指定する。
    • ILSOURCE - 現在の .NET アセンブリの一部を形成する別のプログラムを含むファイルを指定する。これには、部分クラスの別のコンポーネントを含められる。

構文規則

  1. literal-1 は英数字の定数とし、表意定数は指定できない。
  2. type-specifier-1 には、クラス定義で定義したクラスの名前は指定できない。
  3. type-specifier-1 は class-name-1 を直接的にも間接的にも継承できない。
  4. type-specifier-1 には、FINAL 句で定義したクラスの名前は指定できない。
  5. .NET 用 のプログラムを翻訳する際には、type-specifier-1 を繰り返せない。つまり、継承の複製は許可されない。
  6. type-specifier-2 はインターフェイスを参照できない。
  7. 指定したクラス名は、INHERITS 句では複数回使用できない。
  8. 同じ名前の複数の異なるメソッドが継承されている場合、これらはいずれも FINAL 句を使用して指定することはできない。同じメソッドが 1 つのスーパークラスから複数の中間スーパークラスを介して継承される場合は、FINAL 句を使用して指定できる。
  9. あるメソッド名が複数の継承クラスから継承されている場合、これらのメソッドのプロトタイプが、このクラスのいずれかのメソッドと同じインターフェイスを持つメソッドを定義するようなものであれば、このクラスはすべての継承クラスに準拠しなくなるため、同じメソッド名を持つメソッドをこのクラスで宣言する必要がある。このメソッドは、「メソッド名段落」トピックの構文規則 9 に準拠する必要がある。
    注: クラス A が 2 つのクラス B および C からメソッド M を継承し、クラス B および C で M のメソッド インターフェイスが異なる場合 (たとえば、B の M がクラス X のオブジェクトを返すのに対し、C の M が無関係なクラス Y のオブジェクトを返すなど)、この継承は無効になる (クラス A でメソッド インターフェイスの適合性の問題を解決する、M の有効なメソッドのオーバーライドが定義されている場合は除く)。必ずしも可能であるとは限らないが (その場合、継承は有効にならない)、それが可能であるケースもある。たとえば、クラス X および Y を継承するクラス Z を定義できる場合、M のメソッド オーバーライドをクラス A で指定し、クラス Z のオブジェクトを返すことができる。
  10. parameter-name-1 は、このクラス定義のリポジトリ段落内のクラス指定子またはインターフェイス指定子に指定した名前とする。
  11. NETJVM 属性句については、「ATTRIBUTE、CUSTOM-ATTRIBUTE 句」のトピックに記載されている。

一般規則

  1. class-name-1 は、このクラス定義で宣言したクラスの名前を指定する。ただし literal-1 を指定した場合は、運用環境の外部にあるクラスの名前に literal-1 が指定される。
  2. INHERITS 句は、「クラスの継承」に基づいて class-name-1 が継承するクラスの名前を指定する。
  3. FINAL 句が指定されている場合、そのクラスを他のクラスのスーパークラスにすることはできない。
  4. NETJVM PARTIAL 指定は、該当のクラスが部分クラスであり、結合された単一のクラスを形成するために、外部化された同じ名前を 1 つ以上の他の部分クラスと結合できることを指定する。これは、ILSOURCE 指令を使用して結合できる。
  5. NETJVM USING 指定は、該当のクラスがパラメーター化されていることを指定する。parameter-name-1 は仮パラメーターに指定する名前である。パラメーター化されたクラスの動作の詳細については、「言語の基礎」の章の「パラメーター付きクラス」トピックを参照。

    .NET 用の翻訳を実施中のクラスに対して USING が指定されている場合、生成されるクラスは汎用クラスと呼ばれる。パラメーターの制約は、制約段落で指定できる。

  6. parameter-name-1 はこのクラス定義で指定するものとし、クラス名またはインターフェイス名を使用できる場所でのみ指定する。
  7. 同じクラスが複数回継承される場合、そのクラスのデータのコピーは class-name-1 に 1 つだけ追加される。
    注: 同じクラスを直接的に複数回継承することはできないが、クラスは間接的に複数回継承される可能性がある。たとえば、クラス D はクラス B および C から継承し、クラス B および C はともにクラス A から継承する場合、クラス D はクラス A を間接的に 2 回継承する。つまり、1 回は B のスーパークラスとして、もう 1 回は C のスーパークラスとして継承する。
  8. NETJVM STATIC を指定すると、クラス内のすべてのメソッドが静的メソッドになる。