継承
継承は、インヘリタンスとも呼ばれます。既に用意されているオブジェクトを基に、機能などを追加して新たなオブジェクトを作ることができる機能です。
プログラミング方法は、クラスを定義する際に継承の指定をします。
継承の指定をしたら、スーパークラスにはないフィールドやメソッドを追加や修正する記述をします。
○ プロジェクト
プロジェクトを作成して確認してみましょう。
プロジェクトの種類 |
コンソール アプリケーション |
プロジェクト名 |
InheritanceTest |
サンプルダウンロード
○ 作成の準備
車クラスを基にバスクラスを定義してみましょう。スーパークラスとするCarクラスを「SharedTest2」からコピーしてください。
○ プログラム(Busクラス)
サブクラスとしてBusクラスを作成しましょう。追加する項目は、運賃・人数をあらわすフィールドと、乗車・降車するメソッドです。
Bus.vb
- Public Class Bus
- Inherits Car
- 'フィールド==========
- Private m_unchin As Integer '運賃情報
- Private m_cnt As Integer '乗客数情報
- 'プロパティ==========
- '運賃参照用
- Public ReadOnly Property Unchin() As Integer
- Get
- Return Me.m_unchin
- End Get
- End Property
- '乗客数参照用
- Public ReadOnly Property Count() As Integer
- Get
- Return Me.m_cnt
- End Get
- End Property
- 'コンストラクタ==========
- Public Sub New()
- Me.New(100)
- End Sub
- Public Sub New(ByVal gas As Double)
- MyBase.New(gas)
- Me.m_unchin = 0
- Me.m_cnt = 0
- End Sub
- 'メソッド==========
- '乗車するメソッド
- Public Sub jousya(ByVal pri As Integer)
- If Not Me.Speed = 0 Then
- MessageBox.Show("停車させてください。")
- Exit Sub
- End If
- If Me.m_cnt > 50 Then
- MessageBox.Show("満席です。")
- Exit Sub
- End If
- Me.m_unchin += pri
- Me.m_cnt += 1
- End Sub
- '降車するメソッド
- Public Sub kousya()
- If Me.m_cnt = 0 Then
- MessageBox.Show("誰も乗車していません。")
- Exit Sub
- End If
- If Not Me.Speed = 0 Then
- MessageBox.Show("停車させてください。")
- Exit Sub
- End If
- Me.m_cnt -= 1
- End Sub
- End Class
○ フォームデザイン
利用するために、Formに次のようにコントロールを追加して、各イベントプロシージャに記述をしてください。
コントロールの配置例
○ プログラム(Form1クラス)
各イベントプロシージャを以下のように記述してください。
Form1.vb
- 'インスタンス変数
- Dim bus1 As Bus
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- 'インスタンス生成
- Me.bus1 = New Bus(120)
- '表示
- Me.showData()
- Me.TextBox3.Text = 0
- End Sub
- '[アクセル]ボタンクリック
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Me.bus1.speedUp(5)
- Me.showData()
- End Sub
- '[ブレーキ]ボタンクリック
- Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
- Me.bus1.speedDown(5)
- Me.showData()
- End Sub
- '[乗車]ボタンクリック
- Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
- Me.bus1.jousya(200)
- Me.TextBox3.Text = Me.bus1.Unchin
- End Sub
- '[降車]ボタンクリック
- Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
- Me.bus1.kousya()
- End Sub
- '表示を行うプロシージャ
- Private Sub showData()
- Me.TextBox1.Text = Me.bus1.Speed
- Me.TextBox2.Text = Me.bus1.Gas
- End Sub
Carクラスを基にBusクラスを作成しました。BusクラスはCarクラスを継承しているので、Carクラスのメンバを記述しなくても使用することができます。ただし、Privateになっているメンバは、継承したクラスでも直接アクセスすることができません。Protectedにすれば、直接操作できます。
VB2010では、サブクラスは1つのクラスから継承することができます。複数のクラスから継承させることはできません。(多重継承の禁止)
今回のサンプルは、停止している状態で乗車することができ、乗車すると200円売り上げが加算されます。また、定員がいっぱいになると乗車できなくなります。そして、停止している状態で降車することができ、乗客がいなくなると降車できなくなります。
前へ 次へ