Exercise on Polymorphism
This exercise uses a variety of access types.
The base class BankAccount is abstract. The job of the base class is to generate a new account number each time a derived class is instantiated. The maximum single debit is $50. NextNumber is a shared propery. The Balance property in the Student class returns the balance + the student's overdraftamount.
The PrintStatement prints the account number and the balance.
The PrintSpecialComments identifies the Student's overdraft limit.
Class Diagram |
In a console app, write a procedure to process the student account by receiving a base class type polymorphically. The procedure should load up all the properties and use all the methods.
Public MustInherit Class BankAccount Private mBalance As Double Private mNextNumber As Integer Private mNumber As Integer Protected ReadOnly Property Balance As Double Get Return mBalance End Get End Property Public MustOverride Property MaxSingleDebit As Double Public Shared Property NextNumber As Integer Public Sub Credit(Amount As Double) mBalance += Amount End Sub Public Function Debit(Amount As Double) As Boolean If Amount > MaxSingleDebit Then Throw New ArgumentException("The amount exceeds the Maximum single debit amount") Else mBalance -= Amount Return True End If End Function Protected Sub New(Balance As Double) NextNumber += 1 mNumber = NextNumber mBalance = Balance End Sub Public MustOverride Sub PrintSpecialComments() Public Overridable Sub PrintStatement() Console.WriteLine("Account number: " & mNumber) Console.WriteLine("Balance: " & mBalance.ToString("C")) End Sub End Class Public Class StudentAccount Inherits BankAccount Private mOverdraftLimit As Double Protected Shadows ReadOnly Property Balance As Double Get Return MyBase.Balance End Get End Property Public Overrides Property MaxSingleDebit As Double Public Sub IncreaseLimit(Amount As Double) _MaxSingleDebit += Amount End Sub Public Sub New(Balance As Double, OverdraftLimit As Double) MyBase.New(Balance) mOverdraftLimit = OverdraftLimit MaxSingleDebit = 50 End Sub Public Overrides Sub PrintSpecialComments() Console.WriteLine("Overdraft limit: " & mOverdraftLimit.ToString("c")) Console.WriteLine("Student overdraft limit: " & mOverdraftLimit.ToString("c")) Console.WriteLine("Maximum single withdrawal: " & MaxSingleDebit.ToString("c")) End Sub Public Overrides Sub PrintStatement() MyBase.PrintStatement() End Sub End Class Public Class MyApp Public Sub Main() Try Dim x As BankAccount = New StudentAccount(3050, 310) Dim y As BankAccount = New StudentAccount(5050, 510) x.Credit(100) x.Debit(50) y.Credit(100) y.Debit(50) UseAnyKindOfAccount(x) Console.WriteLine() UseAnyKindOfAccount(y) Catch ex As Exception Console.WriteLine(ex.Message) End Try End Sub Public Sub UseAnyKindOfAccount(anAccount As BankAccount) Dim x As StudentAccount x = TryCast(anAccount, StudentAccount) x.PrintStatement() x.PrintSpecialComments() End Sub End Class
Imports ClassLib Module Module1 Sub Main() Dim x As New MyApp x.Main() Console.ReadLine() End Sub End Module
6.02.2011
// //
0
comments
//
0 comments to "Polymorphism I - VB.NET"
Post a Comment