Mega Code Archive
Demonstrate polymorphism in Point-Circle-Cylinder hierarchy
Class CTest2
Shared Sub Main()
Dim point As New Point(7, 11)
Dim circle As New Circle(22, 8, 3.5)
Dim cylinder As New Cylinder(10, 10, 3.3, 10)
Dim arrayOfShapes As Shape() = New Shape(2) {}
arrayOfShapes(0) = point
arrayOfShapes(1) = circle
arrayOfShapes(2) = cylinder
Console.WriteLine(point.Name & ": " & _
point.ToString() & vbCrLf & circle.Name & ": " & _
circle.ToString() & vbCrLf & cylinder.Name & _
": " & cylinder.ToString())
Dim shape As Shape
For Each shape In arrayOfShapes
Console.WriteLine(shape.Name & ": " & _
shape.ToString() & vbCrLf & "Area = " & _
String.Format("{0:F}", shape.Area) & vbCrLf & _
"Volume = " & String.Format("{0:F}", shape.Volume))
Next
End Sub ' Main
End Class
Public MustInherit Class Shape
Public Overridable Function Area() As Double
Return 0
End Function
Public Overridable Function Volume() As Double
Return 0
End Function
Public MustOverride ReadOnly Property Name() As String
End Class
Public Class Point
Inherits Shape
Private mX, mY As Integer
Public Sub New()
End Sub ' New
Public Sub New(ByVal xValue As Integer, _
ByVal yValue As Integer)
End Sub ' New
Public Overrides Function ToString() As String
Return "[" & mX & ", " & mY & "]"
End Function ' ToString
Public Overrides ReadOnly Property Name() As String
Get
Return "Point"
End Get
End Property ' Name
End Class
Public Class Circle
Inherits Point
Private mRadius As Double
Public Sub New()
End Sub ' New
Public Sub New(ByVal xValue As Integer, _
ByVal yValue As Integer, ByVal radiusValue As Double)
MyBase.New(xValue, yValue)
End Sub ' New
Public Overrides Function ToString() As String
Return "Center= " & MyBase.ToString() & _
"; Radius = " & mRadius
End Function ' ToString
Public Overrides ReadOnly Property Name() As String
Get
Return "Circle"
End Get
End Property ' Name
End Class
Public Class Cylinder
Inherits Circle
Protected mHeight As Double
Public Sub New()
End Sub ' New
Public Sub New(ByVal xValue As Integer, _
ByVal yValue As Integer, ByVal radiusValue As Double, _
ByVal heightValue As Double)
MyBase.New(xValue, yValue, radiusValue)
End Sub ' New
Public Overrides ReadOnly Property Name() As String
Get
Return "Cylinder"
End Get
End Property ' Name
End Class
Point: [0, 0]
Circle: Center= [0, 0]; Radius = 0
Cylinder: Center= [0, 0]; Radius = 0
Point: [0, 0]
Area = 0.00
Volume = 0.00
Circle: Center= [0, 0]; Radius = 0
Area = 0.00
Volume = 0.00
Cylinder: Center= [0, 0]; Radius = 0
Area = 0.00
Volume = 0.00