ECB2123 Programming for Networks
Laboratory Exercise 1: Inheritance & Polymorphism
You need to complete all questions.
- Shown is the code for a class Lecturer for use in this question.
//******************************************************** // Lecturer.java A class to represent a lecturer at VU //******************************************************** public class Lecturer { private String firstName ; private String familyName ; private int phoneNo ; private String title ; public Lecturer (String firstNameIn, String familyNameIn, int phoneNoIn, String titleIn) { firstName = firstNameIn ; familyName = familyNameIn ; phoneNo = phoneNoIn ; title = titleIn ; } public String getFamilyName ( ) { return familyName; } public int getPhoneNo ( ) { return phoneNo ; } public void setTitle (String titleIn ) { title = titleIn ; } public String toString () { String toScreen ; toScreen = "\n\n" + title + "\t" + firstName + "\t" + familyName ; toScreen += "\nPhone: " + phoneNo ; return toScreen; } } //end class
a) Write a test program that creates several instances of class Lecturer and stores them in an array called staffList. When the program prints out the staffList it should look like:-
b) Write code to printout ONLY the phone numbers of the lecturers in the staffList as shown.
c) Finally, write code to allow you to change the title of your current lecturer to “Professor” stored in the staffList and print out the result as shown.
OPTIONAL CHALLENGE/not assessed
- Next modify the program to store your instances of class Lecturer in an Java ArrayList class, instead of the array. Use the Java online documentation at http://docs.oracle.com/javase/7/docs/api/index.html to find out how to construct an Search the documentation for methods to add elements to your list of lecturers.
Note: when you call the toString( ) method of an ArrayList object it includes square brackets at the beginning and end of the listing.
- Create a class Account that represents a banking account. The class has attributes owner, accountNo and The constructor for the class requires the name of the owner of the account and the initial deposit for the account, which will be stored in the balance attribute. A static int variable is used for accountNo, which is initially set to 12345. Each object of the class Account is assigned its accountNo by adding 1 to the current value in the static variable. Therefore, the first account will be assigned 12346 as its accountNo.
The business rules for objects of class Account are:
- An owner name can be changed
- No method should allow the balance value to become negative
- Only deposits and withdrawals can alter the value stored in balance, and their amounts must be positive, that is you cannot deposit - $10.00
- Interest is always 5% per annum.
Following the business rules, create methods of deposit, withdrawal, addInterest and appropriate get and set methods for the class. The toString should display the accountNo and the balance.
Note: To format the balance so that it prints out with a $ in front of the amount and to two decimal places, you can use class NumberFormat to do this. You will need to
- Firstly make an import declaration import java.text.NumberFormat;
- Add the following to your code NumberFormat formatter = NumberFormat.getCurrencyInstance ();
- Call up the method format on the balance formatter.format (balance);
Write a method called equals that compares two Account objects and returns true if the objects have the same owner, otherwise the method returns false.
Write a class TestAccount which creates an array of five different Account objects, with at least two objects having the same owner values.
Systematically check the functionality of all methods of class Account including the equals method to find out how many different accounts are owned by the same person.
3. Using the class Account in question 2, derive two additional account types: OnLineAccount and SavingsAccount, where OnLineAccount and SavingsAccount inherit from Account.
In Account, change the visibility of all data to protected. Change the withdraw method so that it becomes an abstract method. This action will necessitate you declaring the class as abstract. Deposits should work the same way in OnLineAccount and SavingsAccount so make sure they cannot override their parent’s version.
The OnLineAccount class has one additional attribute to that of class Account, minimumBalance. All instances of OnLineAccount are created with the minimumBalance amount set to $500. If transactions of any OnLineAccount cause the balance to go below minimumBalance, a $25 fee is subtracted from the account balance. Override the toString method to display everything the Account toString displays plus a message dependent upon the balance. If the balance is below the minimumBalance, a message stating that a $25 fee has been already been subtracted needs to alert the customer. Use the parent class toString to do most of the work.
The SavingsAccount class has one additional attribute to that of class Account, overdraft. All instances of SavingsAccount are created with the overdraft amount set to -$1000. An overdraft amount is the amount an object of SavingsAccount class may allow the balance to go to. Implement the withdraw method so that overdrafts are allowed up to the amount stored in overdraft. Any withdrawals that allow the balance to drop below zero and up to the overdraft amount are allowed but the overdraft fee of $30 is incurred each time a transaction causes the balance to be below zero. Override the toString method to display everything the Account toString displays plus a message dependent upon the balance. If the balance is below zero, a message stating that the person is in overdraft and a $30 fee has been already been incurred. Use the parent class toString to do most of the work.
Create a driver class with an array of 5 objects of Account, being some instances of the child classes OnLineAccount or SavingsAccount. Systematically test the full functionality of both child classes.
4. Consider the following UML diagram
a) Implement all three classes GeometricObject, Circle and Rectangle. Note the toString( ) method should print out relevant data such as colour, filledIn, length, width, radius, area and perimeter for each shape.
b) Write a program TestShapes in which an array to 5 GeometricObjects are stored. The five GeometricObjects are
- pink, filled in, Circle, radius 4.5
- blue, not filled in, Circle, radius 3.1
- cyan, filled in, Rectangle, length 2.0, width 3.4
- green, filled in, Circle, radius 3.6
- orange, not filled in, Rectangle, length 5.0, width 1.4
c) Use a for loop to print the details of each element stored in the array to the screen.
d) Use a for loop to print the area for each shape
e) Use a for loop to print the perimeter for each shape
f) Consider all triangles. Use the inheritance hierarchy shown for GeometricObject and add a class to represent triangles. Design and create class Triangle. Your objective is to reuse as much code as possible.
g) Consider all boxes. Use the inheritance hierarchy shown for GeometricObject and add a class to represent boxes. Design and create class Box. Your objective is to reuse as much code as possible.