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

Home
VB.Net
1.2D
2.Application
3.Class
4.Data Structure
5.Data Types
6.Database ADO.net
7.Development
8.Event
9.File Directory
10.Generics
11.GUI
12.Language Basics
13.LINQ
14.Network Remote
15.Security
16.Thread
17.Windows Presentation Foundation
18.Windows System
19.XML
20.XML LINQ
VB.Net Tutorial
VB.Net by API
VB.Net » Class » PolymorphismScreenshots 
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(711)
      Dim circle As New Circle(2283.5)
      Dim cylinder As New Cylinder(10103.310)

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

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

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

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

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

      Dim shape As CShape

      For Each shape In arrayOfShapes
         Console.WriteLinevbCrLf & 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 >= 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 >= 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 * 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
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.