Demonstrate polymorphism in Point-Circle-Cylinder hierarchy : Polymorphism « Class « VB.Net






Demonstrate polymorphism in Point-Circle-Cylinder hierarchy

Demonstrate polymorphism in Point-Circle-Cylinder hierarchy
Imports System

Public Class MainClass

    Shared Sub Main(ByVal args As String())
      ' instantiate Point, Circle and Cylinder objects
      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)

      ' instantiate array of base-class references
      Dim arrayOfShapes As CShape() = New CShape(2) {}

      ' arrayOfShapes(0) refers to Point object
      arrayOfShapes(0) = point

      ' arrayOfShapes(1) refers to Circle object
      arrayOfShapes(1) = circle

      ' arrayOfShapes(2) refers to Cylinder object
      arrayOfShapes(2) = cylinder

      Console.WriteLine( point.Name & ": " & _
         point.ToString() & vbCrLf & circle.Name & ": " & _
         circle.ToString() & vbCrLf & cylinder.Name & _
         ": " & cylinder.ToString() )

      Dim shape As CShape

      For Each shape In arrayOfShapes
         Console.WriteLine( vbCrLf & vbCrLf & shape.Name & ": " & _
            shape.ToString() & vbCrLf & "Area = " & _
            String.Format("{0:F}", shape.Area) & vbCrLf & _
            "Volume = " & String.Format("{0:F}", shape.Volume) )
      Next
    End Sub
End Class

Public MustInherit Class CShape

   ' return shape area
   Public Overridable Function Area() As Double
      Return 0
   End Function ' Area

   ' return shape volume
   Public Overridable Function Volume() As Double
      Return 0
   End Function ' Volume

   ' overridable method that should return shape name
   Public MustOverride ReadOnly Property Name() As String

End Class ' CShape


Public Class Circle
   Inherits Point ' Circle Inherits from class Point

   Private mRadius As Double

   ' default constructor
   Public Sub New()

      ' implicit call to Point constructor occurs here
      Radius = 0
   End Sub ' New

   ' constructor
   Public Sub New(ByVal xValue As Integer, _
      ByVal yValue As Integer, ByVal radiusValue As Double)

      ' use MyBase reference to Point constructor explicitly
      MyBase.New(xValue, yValue)
      Radius = radiusValue
   End Sub ' New

   ' property Radius
   Public Property Radius() As Double

      Get
         Return mRadius
      End Get

      Set(ByVal radiusValue As Double)

         If radiusValue >= 0 Then ' mRadius must be nonnegative
            mRadius = radiusValue
         End If

      End Set

   End Property ' Radius

   ' calculate Circle diameter
   Public Function Diameter() As Double
      Return mRadius * 2
   End Function ' Diameter

   ' calculate Circle circumference
   Public Function Circumference() As Double
      Return Math.PI * Diameter()
   End Function ' Circumference

   ' calculate Circle area
   Public Overrides Function Area() As Double
      Return Math.PI * mRadius ^ 2
   End Function ' Area

   ' return String representation of Circle
   Public Overrides Function ToString() As String

      ' use MyBase to return Circle String representation
      Return "Center= " & MyBase.ToString() & _
         "; Radius = " & mRadius
   End Function ' ToString

   ' override property Name from class Point
   Public Overrides ReadOnly Property Name() As String

      Get
         Return "Circle"
      End Get

   End Property ' Name

End Class

Public Class Cylinder
   Inherits Circle ' Cylinder inherits from class Circle

   Private mHeight As Double

   ' default constructor
   Public Sub New()

      ' implicit call to Circle constructor occurs here
      Height = 0
   End Sub ' New

   ' four-argument constructor
   Public Sub New(ByVal xValue As Integer, _
      ByVal yValue As Integer, ByVal radiusValue As Double, _
      ByVal heightValue As Double)

      ' explicit call to Circle constructor
      MyBase.New(xValue, yValue, radiusValue)
      Height = heightValue ' set Cylinder height
   End Sub ' New

   ' property Height
   Public Property Height() As Double

      Get
         Return mHeight
      End Get

      ' set Cylinder height if argument value is positive
      Set(ByVal heightValue As Double)

         If heightValue >= 0 Then ' mHeight must be nonnegative
            mHeight = heightValue
         End If

      End Set

   End Property ' Height

   ' override method Area to calculate Cylinder surface area
   Public Overrides Function Area() As Double
      Return 2 * MyBase.Area + MyBase.Circumference * mHeight
   End Function ' Area

   ' calculate Cylinder volume
   Public Overrides Function Volume() As Double
      Return MyBase.Area * mHeight
   End Function ' Volume

   ' convert Cylinder to String
   Public Overrides Function ToString() As String
      Return MyBase.ToString() & "; Height = " & mHeight
   End Function ' ToString

   ' override property Name from class Circle
   Public Overrides ReadOnly Property Name() As String

      Get
         Return "Cylinder"
      End Get

   End Property ' Name

End Class 

Public Class Point
   Inherits CShape ' Point inherits from MustInherit class CShape

   ' point coordinate
   Private mX, mY As Integer

   ' default constructor
   Public Sub New()

      ' implicit call to Object constructor occurs here
      X = 0
      Y = 0
   End Sub ' New

   ' constructor
   Public Sub New(ByVal xValue As Integer, _
      ByVal yValue As Integer)

      ' implicit call to Object constructor occurs here
      X = xValue
      Y = yValue
   End Sub ' New

   ' property X
   Public Property X() As Integer

      Get
         Return mX
      End Get

      Set(ByVal xValue As Integer)
         mX = xValue ' no need for validation
      End Set

   End Property ' X

   ' property Y 
   Public Property Y() As Integer

      Get
         Return mY
      End Get

      Set(ByVal yValue As Integer)
         mY = yValue ' no need for validation
      End Set

   End Property ' Y

   ' return String representation of Point
   Public Overrides Function ToString() As String
      Return "[" & mX & ", " & mY & "]"
   End Function ' ToString

   ' implement MustOverride property of class CShape
   Public Overrides ReadOnly Property Name() As String

      Get
         Return "Point"
      End Get

   End Property ' Name

End Class 
           
       








Related examples in the same category

1.PolyMorphism At WorkPolyMorphism At Work