Copyright © 2015, mgr inż. Janusz Bonarowski 1
Polimorfizm – pola
Polimorfizm - w informatyce pojęcie dla określenia różnych sposobów zachowania się metody o tej samej nazwie w zależności od obiektu, na którym jest wykonywana. Polimorfizm wiąże się ściśle z dziedziczeniem.
Zadanie
Utworzymy klasę bazową Figura posiadającą metodę (napiszmy ją funkcją) o nazwie Pole() z atrybutem MustOverride bo nie ma treści.
Klasa bazowa niech będzie klasa abstrakcyjną (co definiuje atrybut klasy MustInherit).
Utwórzmy klasy potomne: Kolo i Kwadrat, które dziedziczą po klasie bazowej Figura (co definiuje wiersz Inherits Figura ).
Niech wartość promienia dla klasy Kolo i wartość boku dla klasy Kwadrat będzie określana przez konstruktor. Konstruktor to procedura Sub koniecznie o nazwie New. Procedura ta może mieć argumenty. W naszym przypadku będzie ona miała argument. Dzięki temu będziemy mogli ustawić wartość promienia lub boku, od razu instrukcjami, bez tworzenia właściwości (Property). Np.:
Dim mojaFigura As Figura mojaFigura = New Kolo(10) lub
mojaFigura = New Kwadrat(10)
Class1.vb
Public MustInherit Class Figura 'Klasa abstrakcyjna
Public MustOverride Function Pole() As Single 'nawet nie ma End Function End Class
Public Class Kolo Inherits Figura
Private _Promien As Single
Sub New(Promien_kola) 'konstruktor, zdefiniujemy Kolo(wymiar) _Promien = Promien_kola
End Sub
Public Overrides Function Pole() As Single Return Math.PI * _Promien ^ 2
End Function End Class
Public Class Kwadrat Inherits Figura
Private _Bok As Single
Sub New(Bok_kwadratu As Single) 'konstruktor, zdefiniujemy Kwadrat(wymiar) _Bok = Bok_kwadratu
End Sub
Public Overrides Function Pole() As Single Return _Bok ^ 2
End Function End Class
Form1.vb
Public Class Form1
Dim mojaFigura As Figura
Private Sub Button1_Click(sender As Object, e As EventArgs) _
Handles Button1.Click mojaFigura = New Kolo(10) 'korzystamy z konstruktora
TextBox1.Text = mojaFigura.Pole 'korzystamy z metody
mojaFigura = New Kwadrat(10) 'korzystamy z konstruktora TextBox2.Text = mojaFigura.Pole 'korzystamy z metody
End Sub End Class