C#のオーバーライドとは?実行時ポリモーフィズムの基本と実装例
C#におけるオーバーライド(上書き)は、実行時ポリモーフィズム(ランタイム・ポリモーフィズム)を実現するための重要な仕組みです。この手法は「動的バインディング」や「遅延バインディング」とも呼ばれ、プログラムの実行時に実際に呼び出されるメソッドが決定されます。
オーバーライドの仕組み
実行時ポリモーフィズムは、主に以下の2つの要素によって実装されます。
- 抽象クラス(abstract class):抽象メソッドを含み、それ自体ではインスタンス化できない基底クラス
- 仮想関数(virtual メソッド):派生クラスで上書きできるよう宣言されたメソッド
抽象クラスに含まれる抽象メソッドには実体がなく、必ず派生クラス側で実装する必要があります。これにより、同じメソッド呼び出しでも、実際のオブジェクトの型に応じて異なる処理が実行されるという柔軟な設計が可能になります。
サンプルコード:抽象クラスによるオーバーライド
次の例では、抽象クラス Shape を継承した Rectangle クラスが、抽象メソッド area() をオーバーライドして面積を計算しています。
using System;
namespace PolymorphismApplication {
abstract class Shape {
public abstract int area();
}
class Rectangle : Shape {
private int length;
private int width;
public Rectangle(int a = 0, int b = 0) {
length = a;
width = b;
}
public override int area() {
Console.WriteLine("Rectangle class area :");
return (width * length);
}
}
class RectangleTester {
static void Main(string[] args) {
Rectangle r = new Rectangle(10, 7);
double a = r.area();
Console.WriteLine("Area: {0}", a);
Console.ReadKey();
}
}
}
コードのポイント
- 基底クラス
Shapeのarea()はabstractとして宣言されており、シグネチャのみが定義されています。 - 派生クラス
Rectangleではoverrideキーワードを使ってarea()を実装し、幅 × 長さで長方形の面積を返します。 Mainメソッド内でr.area()を呼び出すと、実行時にRectangle側の実装が選択され、「Rectangle class area :」と「Area: 70」が出力されます。
このようにオーバーライドを活用することで、共通のインターフェースを保ちながら、クラスごとに異なる振る舞いを持たせることができます。これは大規模なアプリケーションにおいて、拡張性と保守性の高いコードを書くための基礎となるテクニックです。
-
Pythonにおけるメソッドのオーバーライドとは?基本と実例をわかりやすく解説
Pythonでは、親クラス(スーパークラス)で定義されたメソッドを、子クラス(サブクラス)側で自由に上書きすることができます。この仕組みを「メソッドのオーバーライド」と呼びます。オーバーライドを行う主な理由は、サブクラスにおいて親クラスとは異なる特別な処理や振る舞いを持たせたい場合です。継承した機能をそのまま使うのではなく、自分のクラスに合わせてカスタマイズできるのが大きなメリットです。メソッドのオーバーライドの例以下は、親クラスのメソッドを子クラスで上書きする基本的なサンプルコードです。#!/usr/bin/python3 class Parent: # 親クラスを定義 def
-
JavaのtoString()メソッドをオーバーライドする目的とは?意味と実装例を解説
JavaにおけるtoString()メソッドとは、どのような役割を持つメソッドなのでしょうか? toString()は、クラスのオブジェクトを文字列(String)として表現したい場合に使用するメソッドです。このメソッドを呼び出すと、オブジェクトの内容をテキスト形式で返してくれます。 実は、オブジェクトをSystem.out.println()などで出力するとき、Javaコンパイラは自動的にそのオブジェクトのtoString()メソッドを呼び出します。つまり、toString()を適切にオーバーライドしておけば、オブジェクトの中身がわかりやすい形で出力されるようになります。 それでは、具体的な