独習講座』の一部分を許可を得て転載したものです。同書籍に関する詳しい情報については、本記事の最後に掲載しています。継承は、VB.NETになって初めて導入された機能である。6にもなかったわけではないのだが、継承の方が、インターフェイスよりもはるかに多くの機能を持っており、単純に「強化されたインターフェイス」を想像するだけでは、十分に把握しきれないものになるだろう。一度、頭の中を真っ白にして、新しい機能を学ぶ気持ちで本章を読むとよいかもしれない。継承という機能で実現されるポリモーフィズムについても本章では説明している。継承とポリモーフィズムは、クラス・ライブラリなどを活用する場合には欠かせない機能なので、学んでおく価値があるだろう。継承とは(非常に曖昧で不確かな言い方で説明するなら)あるクラスの機能を、別のクラスで引き継ぐことである。簡単な機能の引き継ぎは、あるクラスに含まれるメソッドを、別のメソッドからでも利用可能にすることだろう。このようなクラスを作ってみた(リスト10-1)。何の変哲もない、1個のメソッドを持つクラスである。1個のメソッドを持つ簡単なクラスを定義したプログラム次に、このクラスを継承するクラスを記述してみた。リスト10-2がそれである。リスト10-1のクラスを継承するクラスこのコードで注目する必要があるのは、2行目のInheritsステートメントである。このステートメントに続いて、継承するクラスの名前を記述してある。これにより、Class2はClass1の機能を継承していることになる。実際に継承できていることを確認するために記述したのが、リスト10-3である。継承されていることを確認するプログラムこれを実行すると以下のようになる。リスト10-3の実行結果コード6行目のo2.Test1()は、Class2のインスタンスであるo2を経由して、Class1のメソッドTest1を呼び出そうとしている。これは、Class2がClass1を継承していることにより、正常に機能する。5行目のo1.Test2()のように、Class1のインスタンスに対して、Class2のメソッド呼び出しはできない。Class2”という記述がない)ためである。Class2と記述することはできない。継承は循環できないのである。ここで、用語についても説明しておこう。Aというクラスを継承したBというクラスがあるとき、AはBのスーパー・クラスであるといい、BはAのサブ・クラスであるという。この場合なら、Class1はClass2のスーパー・クラスであるといい、Class2はClass1のサブ・クラスであるという。継承の機能を用いれば、既存のクラスを書き換えることなく、容易に機能を追加できるようになる。基本機能だけを含む再利用可能なクラスを作っておき、継承機能を用いて個々のアプリケーション・ソフトで必要になる独自機能を付け加えていくことが可能になる。クラス内で継承元クラスのメソッドを呼ぶあるクラス内のメソッドから、同じクラス内のメソッドを呼び出すとき、いちいちインスタンスを明示せずとも、メソッドの名前だけで呼び出すことができる。これと同じことは、継承したクラスから継承元のメソッドを呼び出すときにも適用される。これを確かめるためにサンプル・プログラムを記述してみた。継承元のクラスから(リスト10-5)。継承元となるクラスを定義したプログラムこのクラスを継承した別のクラスを作成してみた(リスト10-6)。リスト10-5を継承するプログラム10行目のTest2()が、4〜6行目のTest2メソッドを呼び出すことは明らかだろう。9行目のTest1()も、同様にClass1のTest1メソッドを呼び出すことができる。実際に呼び出せていることを、以下のようなコードで確かめてみよう(リスト10-7)。クラスClass1のメソッドTest1が呼び出されることを確認するプログラムこれを実行すると以下のようになる。リスト10-7の実行結果これはメソッドだけに限られるものではなく、プロパティなどでも同様にインスタンスを明示せずに扱うことができる。継承元のメソッドは、常に継承先から呼び出し可能というわけではない。この例では、メソッドの宣言に付いたPublicキーワードが、呼び出し可能であることを示している。ここにPublicではなく、Privateキーワードが付加されている場合は、呼び出すことができない。7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。TranslatorはPowerPoint用のアドイン。