継承

 継承は、インヘリタンスとも呼ばれます。既に用意されているオブジェクトを基に、機能などを追加して新たなオブジェクトを作ることができる機能です。

 プログラミング方法は、クラスを定義する際に継承の指定をします。

クラス継承の書式
Class サブクラス名
 Inherits スーパークラス名
 各種定義…
End Class

 継承の指定をしたら、スーパークラスにはないフィールドやメソッドを追加や修正する記述をします。

○ プロジェクト

 プロジェクトを作成して確認してみましょう。

プロジェクトの種類 コンソール アプリケーション
プロジェクト名 InheritanceTest

サンプルダウンロード

○ 作成の準備

 車クラスを基にバスクラスを定義してみましょう。スーパークラスとするCarクラスを「SharedTest2」からコピーしてください。

○ プログラム(Busクラス)

 サブクラスとしてBusクラスを作成しましょう。追加する項目は、運賃・人数をあらわすフィールドと、乗車・降車するメソッドです。

Bus.vb

  1. Public Class Bus
  2.  Inherits Car
  3.  'フィールド==========
  4.  Private m_unchin As Integer '運賃情報
  5.  Private m_cnt As Integer '乗客数情報
  6.  'プロパティ==========
  7.  '運賃参照用
  8.  Public ReadOnly Property Unchin() As Integer
  9.   Get
  10.    Return Me.m_unchin
  11.   End Get
  12.  End Property
  13.  '乗客数参照用
  14.  Public ReadOnly Property Count() As Integer
  15.   Get
  16.    Return Me.m_cnt
  17.   End Get
  18.  End Property
  19.  'コンストラクタ==========
  20.  Public Sub New()
  21.   Me.New(100)
  22.  End Sub
  23.  Public Sub New(ByVal gas As Double)
  24.   MyBase.New(gas)
  25.   Me.m_unchin = 0
  26.   Me.m_cnt = 0
  27.  End Sub
  28.  'メソッド==========
  29.  '乗車するメソッド
  30.  Public Sub jousya(ByVal pri As Integer)
  31.   If Not Me.Speed = 0 Then
  32.    MessageBox.Show("停車させてください。")
  33.    Exit Sub
  34.   End If
  35.   If Me.m_cnt > 50 Then
  36.    MessageBox.Show("満席です。")
  37.    Exit Sub
  38.   End If
  39.   Me.m_unchin += pri
  40.   Me.m_cnt += 1
  41.  End Sub
  42.  '降車するメソッド
  43.  Public Sub kousya()
  44.   If Me.m_cnt = 0 Then
  45.    MessageBox.Show("誰も乗車していません。")
  46.    Exit Sub
  47.   End If
  48.   If Not Me.Speed = 0 Then
  49.    MessageBox.Show("停車させてください。")
  50.    Exit Sub
  51.   End If
  52.   Me.m_cnt -= 1
  53.  End Sub
  54. End Class

○ フォームデザイン

 利用するために、Formに次のようにコントロールを追加して、各イベントプロシージャに記述をしてください。

コントロールの配置例
コントロールの配置例

○ プログラム(Form1クラス)

 各イベントプロシージャを以下のように記述してください。

Form1.vb

  1. 'インスタンス変数
  2. Dim bus1 As Bus
  3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  4.  'インスタンス生成
  5.  Me.bus1 = New Bus(120)
  6.  '表示
  7.  Me.showData()
  8.  Me.TextBox3.Text = 0
  9. End Sub
  10. '[アクセル]ボタンクリック
  11. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  12.  Me.bus1.speedUp(5)
  13.  Me.showData()
  14. End Sub
  15. '[ブレーキ]ボタンクリック
  16. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  17.  Me.bus1.speedDown(5)
  18.  Me.showData()
  19. End Sub
  20. '[乗車]ボタンクリック
  21. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
  22.  Me.bus1.jousya(200)
  23.  Me.TextBox3.Text = Me.bus1.Unchin
  24. End Sub
  25. '[降車]ボタンクリック
  26. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
  27.  Me.bus1.kousya()
  28. End Sub
  29. '表示を行うプロシージャ
  30. Private Sub showData()
  31.  Me.TextBox1.Text = Me.bus1.Speed
  32.  Me.TextBox2.Text = Me.bus1.Gas
  33. End Sub

 Carクラスを基にBusクラスを作成しました。BusクラスはCarクラスを継承しているので、Carクラスのメンバを記述しなくても使用することができます。ただし、Privateになっているメンバは、継承したクラスでも直接アクセスすることができません。Protectedにすれば、直接操作できます。

 VB2010では、サブクラスは1つのクラスから継承することができます。複数のクラスから継承させることはできません。(多重継承の禁止)

 今回のサンプルは、停止している状態で乗車することができ、乗車すると200円売り上げが加算されます。また、定員がいっぱいになると乗車できなくなります。そして、停止している状態で降車することができ、乗客がいなくなると降車できなくなります。

前へ   次へ