オーバーライド
サブクラスはスーパークラスのメンバを継承することができますが、状況によってはスーパークラスの処理の内容を変更しなくてはならない場合があります。サブクラス側で同じメソッド名でかつ、同じシグネチャのメソッドを再び定義することができます。これをメソッドのオーバーライド(Override)と呼びます。
例えば、Carクラスでは、スピードの制限がありません。基本的に無限にスピードが出るように設計されています。しかし、Busではスピードの制限を設けないと危険ですので、速度の制限を設けたいと思います。では、Busクラスの定義を修正してみましょう。
オーバーライドするためには、スーパークラス側と、サブクラス側でオーバーライドの指定をしなくてはなりません。
■ オーバーライドされる側
Public Overridable Sub SpeedUp(sp As Integer)
・・・
End Sub
■ オーバーライドする側
Public Overrides Sub SpeedUp(sp As Integer)
・・・
End Sub
○ プロジェクト
プロジェクトを作成して確認してみましょう。
プロジェクトの種類 |
コンソール アプリケーション |
プロジェクト名 |
OverrideTest |
サンプルダウンロード
○ 作成の準備
Busクラスにメソッドを追加しましょう。「InheritanceTest」をコピーしてプロジェクトを作成してください。
○ プログラム
まず、CarクラスのSpeedUpメソッドにvirtualキーワードを追加します。
Car.vb
- Public Class Car
- 'フィールド==========
- 'Public _speed As Integer 'スピード情報
- Private _speed As Integer 'スピード情報(修正)
- 'Public _gas As Double 'ガソリン情報
- Private _gas As Double 'ガソリン情報(修正)
- 'メソッド==========
- '加速させるメソッド
- Public Overridable Sub SpeedUp(sp As Integer)
- Me.m_speed += sp
- Me.m_gas -= sp / 10 '加速するとガソリンが減る
- End Sub
次に、BusクラスにSpeedUpメソッドを追加します。
Bus.vb
- Public Class Bus
- Inherits Car
- 'プロパティ==========
- Public Property SalesAmount As Integer '運賃
- Public Property PassengerNumber As Integer '乗客人数
- '加速させるメソッド(オーバーライド)
- Public Overrides Sub SpeedUp(sp As Integer)
- If (Me.Speed + sp) <= 60 Then
- MyBase.SpeedUp(sp)
- End If
- End Sub
- End Class
今回のサンプルにより、60kmよりスピードが出ないようにすることができました。
前へ 次へ