メソッドオーバーライドとは何ですか?
メソッドオーバーライドは、継承階層内のオブジェクト指向プログラミングで使用され、スーパークラスで定義されているメソッドがサブクラスで再定義されると発生します。通常、サブクラス法は、スーパークラスメソッドとは異なることを行うか、スーパークラスの機能を拡張しますが、これは事実ではありません。メソッドオーバーライドは、再定義されたメソッドの内容に関係なく、スーパークラスメソッドがサブクラスで再定義されるたびに発生します。再定義されたメソッド署名はまったく同じでなければなりません
たとえば、クラスAには「dosomathe」と呼ばれるメソッドが含まれている場合があり、この方法では入力パラメーターは必要ありません。さらに、クラスBとCは、クラスAのサブクラスである場合があります。クラスBには、入力パラメーターを取得しない「dosomething」と呼ばれるメソッドが含まれている場合があり、クラスCには入力パラメーターとして数字を取るメソッド「dosomething」が含まれる場合があります。この例では、「dosomine」メソッドが同じmeを持っているため、クラスBのみがオーバーライドのメソッドを実証します。一方、クラスCの「Dosomathe」メソッドは、スーパークラス、クラスAとしての署名が、まったく新しい方法を作成するため、メソッドの過負荷を示しています。
C ++の仮想継承は、メソッドオーバーライドのもう1つの例です。スーパークラスの仮想メソッドは実装されるかもしれませんが、それらのサブクラス定義は、オーバーライドのインスタンスです。サブクラスでメソッドがオーバーライドされている場合、スーパークラスのメソッドは、明示的に呼び出されない限り呼び出されません。オーバーライドされた方法を呼び出すこの特定の方法は、スーパークラスの実装を「隠す」とよく言われます。
メソッドオーバーライドは非常に柔軟ですが、すべてのメソッドがオーバーライドできるわけではなく、この剛性が望ましい場合があります。 JavaとC ++の両方で、メソッドシグネチャに特定のキーワードを適用して、サブクラスでメソッドがオーバーライドされないようにします。これを行うために、Java「最終」キーワードを使用し、C ++は「const」キーワードを使用します。特定の関数が継承ツリー全体で常に変更されていない場合、オーバーライドを無効にすることは有益です。
一般に、データを少数のデータを取得する単純な方法はオーバーライドする必要はありません。オーバーライドから最も利益を得る傾向があるケースは、サブクラスがまったく新しい方法を作成せずにスーパークラスの方法に機能を追加することを目的としている場合です。 1つの特定のタイプのオブジェクトに対してメソッドを完全にやり直す必要がある異常な場合も、この手法の恩恵を受ける可能性があります。メソッドがオーバーライドされたときはいつでも、プログラマーがスーパークラスとサブクラスの両方のメソッドの両方に適切にコメントすることが重要です。理想的には、これらのコメントは、メソッドの各バリアントが何をするか、そしてそれらがどのように、そしてなぜ違うのかを明確にする必要があります。