オーバーライド

 サブクラスはスーパークラスのメンバを継承することができますが、状況によってはスーパークラスの処理の内容を変更しなくてはならない場合があります。サブクラス側で同じメソッド名でかつ、同じシグネチャのメソッドを再び定義することができます。これをメソッドのオーバーライド(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

  1. Public Class Car
  2.  'フィールド==========
  3.  'Public _speed As Integer 'スピード情報
  4.  Private _speed As Integer 'スピード情報(修正)
  5.  'Public _gas As Double 'ガソリン情報
  6.  Private _gas As Double 'ガソリン情報(修正)
  1.  'メソッド==========
  2.  '加速させるメソッド
  3.  Public Overridable Sub SpeedUp(sp As Integer)
  4.   Me.m_speed += sp
  5.   Me.m_gas -= sp / 10     '加速するとガソリンが減る
  6.  End Sub

 次に、BusクラスにSpeedUpメソッドを追加します。

Bus.vb

  1. Public Class Bus
  2.  Inherits Car
  3.  'プロパティ==========
  4.  Public Property SalesAmount As Integer '運賃
  5.  Public Property PassengerNumber As Integer '乗客人数
  1.  '加速させるメソッド(オーバーライド)
  2.  Public Overrides Sub SpeedUp(sp As Integer)
  3.   If (Me.Speed + sp) <= 60 Then
  4.    MyBase.SpeedUp(sp)
  5.   End If
  6.  End Sub
  7. End Class

 今回のサンプルにより、60kmよりスピードが出ないようにすることができました。

前へ   次へ