更新 : 2007 年 11 月
このレッスンでは、継承を使用して、既存のクラスを基にクラスを作成する方法について説明します。
現実に存在する多くのオブジェクトには、共通する属性や動作があります。たとえば、すべての自動車は車輪とエンジンを持ち、走行と停止ができます。しかし、一部の自動車には他とは異なる属性があります。たとえば、コンバーチブル車には開放できる屋根があり、その屋根は電子制御または手動によって下げることができます。
自動車を表すオブジェクトを作成した場合、すべての共通する属性や動作を表すプロパティやメソッドは定義する必要がありますが、開放可能な屋根などの属性は、すべての自動車に当てはまる属性ではないため、追加する必要はありません。
継承を使用すると、自動車クラスから派生した "convertible" クラスを作成できます。このクラスは、自動車クラスが持つすべての属性を継承し、さらにコンバーチブル車に特有の属性や動作も備えることができます。
既存のクラスから継承する
Inherits ステートメントは、既存のクラス (基本クラス) に基づいて新しいクラス (派生クラス) を宣言するときに使用します。派生クラスは、基本クラスで定義されているすべてのプロパティ、メソッド、イベント、フィールド、および定数を継承します。次のコードは、派生クラスの宣言を示しています。
Class DerivedClass
Inherits BaseClass
End Class
新しいクラスである DerivedClass は、インスタンス化できるようになり、そのプロパティやメソッドへは BaseClass と同様にアクセスできます。また、新しいクラスに特有の新しいプロパティやメソッドを追加することもできます。たとえば、前のレッスンで作成した Persons クラスを見てみましょう。
野球選手を表すクラスを作成すると仮定します。野球選手は、Persons クラスで定義されたすべての属性を備えていますが、背番号やポジションなど固有の属性も持っています。この場合、そうしたプロパティを Persons クラスに追加するのではなく、Persons から継承する新しい派生クラスを作成して、そのクラスに新しいプロパティを追加します。
やってみよう
派生クラスを作成するには
前のレッスンで作成した Persons プロジェクトを開きます。このプロジェクトを保存していない場合は、「クラスのテスト」に戻って手順を実行します。
ソリューション エクスプローラの Persons プロジェクトのノードを選択します。
[プロジェクト] メニューの [クラスの追加] をクリックします。
[新しい項目の追加] ダイアログ ボックスの [ファイル名] ボックスに「Players」と入力し、[追加] をクリックします。
新しいクラス モジュールがプロジェクトに追加されます。
コード エディタで、Public Class Players 行のすぐ後に次のコードを追加します。
Inherits Persons
次のコードを追加して、2 つの新しいプロパティを定義します。
Private numberValue As Integer Private positionValue As String Public Property Number() As Integer Get Number = numberValue End Get Set(ByVal value As Integer) numberValue = value End Set End Property Public Property Position() As String Get Position = positionValue End Get Set(ByVal value As String) positionValue = value End Set End Property
[ファイル] メニューの [すべてを保存] をクリックします。
Players クラスをテストする
これで、Persons クラスから派生した Players クラスが作成されました。次の手順では、Players クラスをテストするための新しいプログラムを作成します。
クラスのテスト プロジェクトを作成するには
[ファイル] メニューの [追加] をポイントし、[新しいプロジェクト] をクリックします。
[新しいプロジェクトの追加] ダイアログ ボックスの [テンプレート] ペインで、[Windows アプリケーション] をクリックします。
[プロジェクト名] ボックスに「PlayerTest」と入力し、[OK] をクリックします。
新しい Windows フォーム プロジェクトがソリューション エクスプローラに追加され、新しいフォームが表示されます。
ソリューション エクスプローラで PlayerTest プロジェクトをクリックし、[プロジェクト] メニューの [スタートアップ プロジェクトに設定] をクリックします。
ソリューション エクスプローラで PlayerTest プロジェクトをクリックし、[プロジェクト] メニューの [参照の追加] をクリックします。
[参照の追加] ダイアログ ボックスが開きます。
[プロジェクト] タブをクリックして [Persons] をクリックし、[OK] をクリックします。
フォームをダブルクリックしてコード エディタを開き、Public Class Form1 行のすぐ後に次の宣言を入力します。
Dim player1 As New Persons.Players Dim player2 As New Persons.Players
これにより、Players クラスの 2 つのインスタンスが宣言されます。
[ファイル] メニューの [すべてを保存] をクリックします。
派生クラスをテストするには
ソリューション エクスプローラの PlayerTest プロジェクトで Form1 をクリックし、[表示] メニューの [コード] をクリックします。
コード エディタで、Form1_Load イベント プロシージャに次のコードを追加します。
With player1 .FirstName = "Andrew" .LastName = "Cencini" .Number = 43 .Position = "Shortstop" End With With player2 .FirstName = "Robert" .LastName = "Lyon" .Number = 11 .Position = "Catcher" End With
ソリューション エクスプローラの PlayerTest プロジェクトで Form1 をクリックし、[表示] メニューの [デザイナ] をクリックします。
ツールボックスから、フォームに 2 つの Button コントロールをドラッグします。
1 つ目の Button コントロールを選択し、[プロパティ] ウィンドウで Text プロパティを At Bat に設定します。
2 つ目の Button コントロールを選択し、[プロパティ] ウィンドウで Text プロパティを On Deck に設定します。
1 つ目のボタン (At Bat) をダブルクリックしてコード エディタを開き、Button1_Click イベント ハンドラに次のコードを入力します。
MsgBox(player1.Position & " " & player1.FullName & ", #" & _ CStr(player1.Number) & " is now at bat.")
ここでは、基本クラスである Persons から継承した FullName メソッドを使用しています。
Button2_Click イベント ハンドラに次のコードを追加します。
MsgBox(player2.Position & " " & player2.FullName & ", #" & _ CStr(player2.Number) & " is on deck.")
F5 キーを押してプログラムを実行します。各ボタンをクリックして結果を確認します。
[ファイル] メニューの [すべてを保存] をクリックします。
次の手順
このレッスンでは、既存のクラスから継承する方法、および派生クラスを拡張する方法を説明しました。継承の詳細について学習するには、「詳細情報 : メンバをオーバーライドする」に進んでください。また、次のレッスンでは、コレクションについて学びます。
次のレッスン : 「コレクションを使用して複数のオブジェクトを管理する」