ORJavaScriptが有効ではありません。抽象メソッド/抽象クラス抽象メソッド/抽象クラスabstract修飾子クラス定義時の、メソッドを定義する時に、メソッドの中身(処理部)を書かない方法があります。これはメソッドの名前を宣言するだけで、不完全な定義です。この不完全なメソッドを「抽象メソッド」と言い「abstract修飾子」で宣言します。「抽象メソッド」を含むクラスは、必然的に「抽象クラス」となります。「抽象メソッド」を含まないクラスでも、クラスを「abstract修飾子」で宣言すると、「抽象クラス」となります。「抽象メソッド」を含むクラスは必然的に「抽象クラス」となるのですが、必ずクラスを「abstract修飾子」で宣言しなければいけなくなります。「抽象メソッド」を含むクラスを「アブストラクト」に宣言しないと「E_ERROR」エラーを発します。「抽象メソッド」は、処理部を備えない不完全なメソッドなので、必ず処理部を実装しなければなりません。派生クラスでオーバーライドして、「抽象メソッド」の処理部を実装します。「抽象メソッド」をオーバーライドする時は、“メソッドの引数の数を一致”させます。一致させないと、その時点で「E_ERROR」エラーを発します。オーバーライド時にデフォルト値をセットすれば、引数を追加出来ます。「抽象メソッド」ではデフォルト値がセットされていた引数に、オーバーライド時にデフォルト値をセットしないと「E_ERROR」エラーを発します。オーバーライド時に引数の数を増やす事が出来ても減らす事は出来ません。派生クラスが基底クラスの「抽象メソッド」の処理部を実装しない場合、そのクラスも「抽象クラス」となるので、「abstract修飾子」で宣言する必要があります。「抽象クラス」は“インスタンスを生成する事を想定しないクラス”です。「抽象クラス」のインスタンスを生成する事は出来ません。「抽象クラス」を継承したクラスのインスタンスを生成するには、そのクラスが「抽象メソッド」を全てオーバーライドして、その処理部を実装する必要があります。要するに「抽象クラス」で無くすればいいのです。「抽象メソッド」を含まないクラスをわざわざ「abstract修飾子」で「抽象クラス」にすることで、そのクラスはインスタンスの生成を想定していない(そのクラスの派生クラスが定義されることを想定する)と示す事が出来ます。これまた論よりコード。以下のサンプルと結果をご覧下さい。error:「抽象メソッド」と引数の形態が一致していない)例によって、コメントアウトしている所で「E_ERROR」エラーが発生します。"");」となっています。「{}(波括弧)」で囲まれた処理部が無く、最後が「;(セミコロン)」で終っています。「アブストラクト」宣言したメソッドは必ずこの様に記述します。「アブストラクト」宣言したクラスは「抽象メソッド」を含まなくても「抽象クラス」となります。「抽象メソッド」を含むクラスは必然的に「抽象クラス」になるので、必ず「アブストラクト」宣言します。「抽象メソッド」を含むクラスを継承したクラスが、その処理部を実装しない場合は「抽象クラス」のままです。「抽象クラス」のインスタンスを生成する事は出来ません。通常のメソッドの場合とは違って、「抽象メソッド」をオーバーライドする場合は、引数の形態を一致させる必要があります。デフォルト値をセットした引数を追加出来、また、引数名とデフォルト値が異なるのもOKです。「抽象メソッド」を派生クラスでオーバーライドして(処理部を実装して)、また更にそのクラスの派生クラスでオーバーライドする場合も、元の「抽象メソッド」と、引数の形態を一致させなくてはなりません。そのクラスはあるメソッドを必ず備える(呼び出し方法(引数の形態)も決まっている)が、現時点では処理方法を確定したくない(具体的にどう処理するかは派生クラスに後回し)という場合や派生クラスによってその処理方法が異なるという場合には、基底クラスで「抽象メソッド」を定義しておいて、派生クラスで各々の処理部を実装するようにします。自身のインスタンスが生成される事を想定せず、必ずその派生クラスが定義されることを示すために、「抽象メソッド」を含まないクラスを「アブストラクト」宣言して「抽象クラス」にし、インスタンスの生成が出来ないように出来ます(変な日本語・・・まいいか今更)。