Copyright © 2018, mgr inż. Janusz Bonarowski
1 Polimorfizm – Energie: kinetyczna i potencjalna
Zadanie Klasa bazowa
Utworzymy klasę bazową Energia_ciala. Niech klasa bazowa posiada dwie właściwości.
Jedną właściwością niech będzie Masa ciała. Zdefiniujemy ją w tej klasie „zwyczajnie” – patrz kod.
Druga właściwością niech będzie właściwość abstrakcyjna o nazwie Wlasciwosc zadeklarowana z atrybutem MustOverride.
Niech klasa bazowa posiada metodę Energia także zadeklarowana z atrybutem MustOverride.
Klasy potomne
Utwórzmy klasy potomne: Energia_kinetyczna i Energia_potencjalna, które dziedziczą po klasie bazowej Energia_ciala.
Aby w klasie potomnej Energia_kinetyczna napisać metodę Energia obliczającą energię kinetyczną potrzebujemy oprócz Masy (która dziedziczymy) mieć także dostęp do prędkości. Prędkość zdefiniujemy poprzez właściwość abstrakcyjną Wlasciwosc.
Podobnie dla klasy potomnej Energia_potencjalna - dostęp do Masy mamy (dziedziczenie), a tu Wysokość zdefiniujemy poprzez właściwość abstrakcyjną Wlasciwosc.
Kod – Class.vb
Public MustInherit Class Energia_ciala
Public MustOverride Property Wlasciwosc As Single Public MustOverride Function Energia() As Single Protected _Masa As Single
Public Property Masa As Single Get
Return _Masa End Get
Set(value As Single) _Masa = value End Set
End Property End Class
Public Class Energia_kinetyczna Inherits Energia_ciala
Private _Predkosc As Single
Public Overrides Property Wlasciwosc As Single Get
Return _Predkosc End Get
Set(value As Single) _Predkosc = value End Set
End Property
Public Overrides Function Energia() As Single Return _Masa * _Predkosc ^ 2 / 2
End Function End Class
Public Class Energia_potencjalna Inherits Energia_ciala
Private _Wysokosc As Single
Public Overrides Property Wlasciwosc As Single Get
Return _Wysokosc End Get
Set(value As Single) _Wysokosc = value End Set
End Property
Public Overrides Function Energia() As Single Return _Masa * 9.81 * _Wysokosc
End Function End Class
Copyright © 2018, mgr inż. Janusz Bonarowski
2 Kod – Form1.vb
Public Class Form1
Dim mojaEnergia As Energia_ciala
Private Sub ButtonOblicz_Click(sender As Object, e As EventArgs) _
Handles ButtonOblicz.Click mojaEnergia = New Energia_kinetyczna
mojaEnergia.Masa = CSng(TextBoxMasa.Text)
mojaEnergia.Wlasciwosc = CSng(TextBoxPredkosc.Text) TextBoxEK.Text = CSng(mojaEnergia.Energia)
mojaEnergia = New Energia_potencjalna mojaEnergia.Masa = CSng(TextBoxMasa.Text)
mojaEnergia.Wlasciwosc = CSng(TextBoxWysokość.Text) TextBoxEP.Text = CSng(mojaEnergia.Energia)
End Sub End Class
Rysunek 1. Aplikacja w działaniu