Scalaのオブジェクト指向プログラミング(OOP)における「クラス(class)」は、データ(フィールド)と動作(メソッド)をひとまとまりにして定義するための基本構造です。Scalaはオブジェクト指向と関数型の両方の特徴を持っていますが、クラスはOOPにおける中核的な役割を担っています。
1. クラスの定義
クラスはclassキーワードを使って定義します。次に、基本的なクラス定義の例を示します:
説明
-
name:valで宣言されており、読み取り専用。 -
age:varで宣言されており、読み書き可能。 -
greet: メソッド。インスタンスが自身の情報を出力する処理を行う。
2. クラスのインスタンス化
クラスからオブジェクトを生成するにはnewキーワードを使います(ただし、主コンストラクタだけの場合は省略可能):
3. コンストラクタ
Scalaでは、クラスの定義時に渡される引数が主コンストラクタになります。加えて、def this(...) を使って補助コンストラクタ(auxiliary constructor)も定義できます:
4. メソッドとフィールド
クラス内では、以下の要素を定義できます:
-
フィールド(
valやvar) -
メソッド(
def) -
ネストされたクラスやオブジェクト
-
初期化コード(主コンストラクタ内に記述)
5. 継承
Scalaのクラスは他のクラスをextendsで継承することができます:
-
overrideキーワードは、親クラスのメソッドをオーバーライドする際に必須です。
6. アクセス修飾子
Scalaには以下のアクセス制御があります:
-
public(省略可能):全ての場所からアクセス可能。 -
private:同じクラス内のみアクセス可能。 -
protected:同じクラスとそのサブクラスからアクセス可能。
7. 抽象クラス
クラスの一部を未実装として定義したい場合、abstract classを使います:
抽象クラスはインスタンス化できず、継承して具体的な実装を与える必要があります。
まとめ
Scalaにおけるクラスは、以下のような特徴を持つ重要な構造です:
| 機能 | 説明 |
|---|---|
| フィールドとメソッド | データと処理をひとつにまとめる |
| コンストラクタ | 主と補助の2種類が存在 |
| 継承 | extendsにより親クラスの機能を引き継ぐ |
| 抽象クラス | インタフェース的な使い方が可能 |
| アクセス制御 | privateやprotectedなどで制限可能 |
Scalaのクラスは、Javaと似た構文を持ちながらも、Scalaの関数型機能と統合されているため、柔軟で強力な設計が可能です。
生成日:2025/05/04