機能を追加する継承
継承はクラスを用いるクラシックなオブジェクト指向における1つの目玉機能である。継承とは、あるクラスの持つ機能をそっくり引き継いで、さらに機能を付け加えた新しいクラスを作る機能を言う。
さっそく具体的なサンプルソースを見てみよう。以下のサンプルソースはごく基本的な継承機能を記述したソースコードである。
1: namespace ConsoleApplication5
2: {
3: using System;
4:
5: public class Person
6: {
7: public string getName()
8: {
9: return "私には名前がありません。";
10: }
11: }
12:
13: public class Taro : Person
14: {
15: public string getTaroName()
16: {
17: return "私の名前は太郎です。";
18: }
19: }
20:
21: public class Class1
22: {
23: public static int Main(string[] args)
24: {
25: Person person = new Person();
26: Console.WriteLine( person.getName() );
27: Taro taro = new Taro();
28: Console.WriteLine( taro.getName() );
29: Console.WriteLine( taro.getTaroName() );
30: return 0;
31: }
32: }
33: }
|
|
クラスの継承を使用したサンプル・プログラム |
このソースコードには3つのクラスが定義されている。1つは5行目から始まるPersonクラス。もう1つは13行目から始まるTaroクラス。最後は21行目から始まるClass1クラスであるが、これはただ単にMainメソッドを持つために存在しているだけなので、何の役割もはたしていない。その点で、今回のサンプルはすべて共通しているので、Class1クラスの存在は無視していただきたい。
さて、このサンプルソースのポイントは、13行目である。この行“public class Taro : Person”が意味していることは、以下のとおりだ。まず“public”は、これが外部からアクセスを許されたクラスであることを示す。ただし今回のサンプルではそれほど大きな意味はない。“class”はクラスを宣言するキーワードであり、宣言されるクラスの名前は“Taro”である。そして、その後にあるコロン記号(:)が、他のクラスからの継承を行うという意図を示すために記述される。具体的に、どのクラスから継承されるかは、この後にカンマ区切りで、クラス名や後で説明するインターフェイス名を列挙する。ここでは、“Person”というキーワードを記述することで、Personクラスから継承していることを示している。
Personクラスを継承したTaroクラスでは、Personクラスが持つ機能と、Taroクラスが持つ機能の双方を利用できる。その証拠に、27行目で作成したTaroクラスのインスタンスからは、Personクラスで定義したgetNameメソッドと、Taroクラスで定義したgetTaroNameメソッドの双方がどちらも利用できることが、28行目と29行目から分かるだろう。
このサンプル・プログラムを実際に実行した結果は以下のとおりだ。1行目は、PersonクラスのgetName( )メソッドの実行結果。2行目は、TaroクラスのgetName( )メソッドの実行結果である。TaroクラスはPersonクラスの機能を引き継いでいるので同じ文字列が表示される。3行目は、Taroクラスで追加されたgetTaroName( )の結果である。これはPersonクラスにはなく、Taroクラスにしかないメソッドである。
|
プログラムの実行結果 |
クラスの継承により、Taroクラスでは定義していないPersonクラスのメソッドを呼び出している。 |
|
|
PersonクラスのgetNameメソッドの実行結果。 |
|
|
Personクラスを継承したTaroクラスのgetNameメソッドの実行結果。メソッドの定義自体はTaroクラス内に存在しないにもかかわらず、Personクラスで定義されたgetNameメソッドを実行し、と同じ結果が得られていることが分かる。 |
|
|
同じくTaroクラスのgetTaroNameメソッドの実行結果。 |
|
さて、ここで用語を説明しよう。あるクラスを継承して別のクラスを作ったとき、最初のクラスをスーパークラスという。逆に、あるクラスから別のクラスが作られたとき、作られたクラスはサブクラスという。分かりにくいかもしれないが、これも、そういうものでしかないので、暗記してしまえば難しくはない。
|
スーパークラスとサブクラスの関係 |
あるクラスを継承して別のクラスを作ったとき、元になったクラスのことをスーパークラスと呼び、作成されたクラスをサブクラスと呼ぶ。
|
Insider.NET 記事ランキング
本日
月間