abstract修飾子とは
abstract
は、プログラミングの世界で「まだ完成していない」という意味を持つ特別なキーワードです。具体的には、クラスやメソッドが「設計図のようなもの」として存在するが、まだ具体的な中身や動きが決まっていないことを示します。
例えば…
あなたが新しい家を建てることを考えてみましょう。
- 通常のクラス: これは、すでに全ての詳細が決まった家の設計図のようなものです。部屋の数、大きさ、配置、窓の位置、扉の種類など、全てが具体的に決まっています。この設計図を元に、そのまま家を建てることができます。
- abstractクラス: これは、家の大まかな形や構造は決まっているものの、部屋の役割や内部の詳細がまだ決まっていない設計図のようなものです。例えば、2階建てで、各階に3部屋ずつあることは決まっていますが、どの部屋が寝室で、どの部屋がリビングなのかはまだ決まっていません。このような部分的に未完成の設計図を元に、具体的な家を建てる前に、部屋の役割や内部の詳細を決める必要があります。
このabstract
クラスの中の未定義の部屋が、abstract
メソッドに相当します。これらの部屋(メソッド)は、実際に家を建てる際(サブクラスを作成する際)に、具体的な役割や機能(メソッドの実装)を持つ部屋として完成させる必要があります。
このように、abstract
クラスは、具体的な実装や詳細が一部決まっていない「部分的に未完成の設計図」としての役割を持ち、それを基に具体的な形に仕上げるためのものと考えることができます。
Apexにおけるabstract修飾子
ApexはSalesforceのプラットフォーム上で動作するオブジェクト指向プログラミング言語です。Apexにおいても、abstract
修飾子は他のオブジェクト指向言語と同様の役割を持ちます。具体的には、クラスやメソッドが完全には定義されていないことを示すために使用されます。
- abstractクラス
- 特徴
- abstractクラスはインスタンス化することができません。
- 他のクラスがこのabstractクラスを継承することができます。
- abstractクラス内には具体的な実装を持つメソッドと、abstractメソッドの両方を持つことができます。
- 制約
- abstractクラスを継承するサブクラスは、親クラスの全てのabstractメソッドを実装しなければなりません。
- 背景
- abstractクラスは、上記で述べた「部分的に未完成の設計図」のようなものです。具体的な形や動きがまだ決まっていない部分があります。そのため、この「設計図」自体を直接使用する(インスタンス化する)ことはできません。しかし、この「設計図」を基にして、具体的な「家」(サブクラス)を建てることができます。
- 特徴
- abstractメソッド
- 特徴
- abstractメソッドは、実装(具体的なコードブロック)を持ちません。
- abstractメソッドは、abstractクラス内でのみ定義することができます。
- 制約
- abstractクラスを継承するサブクラスは、そのabstractメソッドを必ず実装しなければなりません。
- 背景
- abstractメソッドは、上記の「設計図」の中の未定義の部屋のようなものです。この部屋の役割や機能はまだ決まっていません。しかし、実際に「家」を建てる際(サブクラスを作成する際)、この部屋に具体的な役割や機能を持たせる必要があります。そのため、abstractメソッドは、サブクラスでの実装を強制する役割を持っています。
- 特徴
このように、abstract修飾子は、具体的な実装や詳細がまだ決まっていない部分を示すためのものであり、それを基に具体的な形や動きを持つ新しいクラスやメソッドを作成する際の「設計図」としての役割を果たします。
コメント