Instruction Sheet
- Write your answers clearly. Use numbered headings or subheadings to show which part of your answer refers to which question. Example: Part A – Question 2.
- Write your answers from page 10 of this document. Please do not modify this document’s content from page 1 to 9.
Page 1 of 9
PART A 10 MARKS
COMPULSORY QUESTIONS
Answer ALL questions from this part.
Each question is worth 2.0 marks (5 x 2 = 10 marks).
Briefly comment on the following statements from Java language point of view. For each question, limit your answers to three to four sentences only.
Question 1 2 Marks
Differentiate Instance variables from static variables.
Question 2 2 Marks
Java Interface can have instance fields and default method implementations.
Question 3 2 Marks
In Java, a sub class can implement only one interface and can be extended from multiple superclasses.
Question 4 2 Marks
How can you remove two adjacent elements from the collection that an Iterator is referring to?
Question 5 2 Marks
Java abstract class can contain implemented and abstract methods.
PART B 35 MARKS
Answer all questions from this part.
Question 1 3 Marks
The following class Loan has incomplete codes. Complete the missing lines of code for the given parameterized constructor, isToMonitor() method, and an overridden toString() method.
Hint:
If the loan amount exceeds $500,000 then isToMonitor() method has to return true; otherwise it should return false.
toString() method should display the Loan details and based on isToMonitor() method’s return value whether the Loan needs monitoring or not.
import java.time.*; public class Loan
{
private double loanAmount; private LocalDate startDate;
private double interestRate;
private static final double LIMIT = 500000.0;
/**@param givenLoanAmount the loan amount
- @param year the year of startDate
- @param month the month of startDate
- @param day the day of startDate
*/
public Loan ( double givenLoanAmount, int year, int month, int day, double givenInterestRate)
{
//Missing lines of code need to be completed by the student
}
/* If the loan amount exceeds $500,000 then isToMonitor()
method has to return true; otherwise it should return false.*/
public boolean isToMonitor()
{
//Missing lines of code need to be completed by the student
}
/* toString() method should display the Loan details and based on isToMonitor() method’s return value whether the Loan needs monitoring or not. */
@Override
public String toString()
{
//Missing lines of code need to be completed by the student
}
}//end class definition
Question 2 3 Marks
How can you create a unique LoanId for each object of Loan (as mentioned in the above Question 1)? Modify the Loan class given in the above Question 1, and create new class named ModifiedLoan, so that each object of ModifiedLoan will have a unique LoanId.
Question 3 3 Marks
Write a driver class to test the ModifiedLoan class that you have created in Question-2). The driver should do the following:
- create two ModifiedLoan objects; one with the loan amount less than $500000 and the other with the loan amount more than $500000.
- print the details of the ModifiedLoan objects on the screen.
Question 4 3 Marks
The following UML class diagram shows that GSTItem class is a subclass of Expense class.
The following table provides the characteristics of the fields that are used in the above two classes.
Field name | Class | Access specifier | Data type |
Name | Expense | private | String |
Amount | Expense | private | double |
GSTIncluded | Expense | private | boolean |
GSTAmount | GSTItem | private | double |
You need to write (define) the above mentioned two Java classes. Your classes should have appropriate fields/variables, constructors and overridden toString() methods.
Question 5 3 Marks
Write (define) an interface called as GSTApplicable. The GSTApplicable interface should have a constant and a method declared with the specification as mentioned in the following table:
Field/method name | Description |
percentageOfGST | A constant with the value of 10 |
calculateGST | A public method that receives no parameters and returns a double |
Question 6 3 Marks
Modify the GSTItem class you have created as part of Question 4 to implement the interface GSTApplicable that you have created as part of Question 5. The modified class should have the name “ModifiedGSTItem” and should include implementation of all the methods declared in the interface GSTApplicable.
Question 7 3 Marks
The following Java program uses the data structure Stack to store data and the program runs without any error. Write the output produced by the program run.
import java.util.Stack; public class StackTest
{
public static void main(String [] args)
{
// name of structures in an array
String [] buildingPlan = {“Foundation”, “Wall”,”Roof”, “Antenna”};
/*creating buildingStack and taking the contents from buildingPlan array and placing them into the buildingStack*/
Stack<String> buildingStack =new Stack<String>();
for(int i=0; i< buildingPlan.length; i++) buildingStack.push(buildingPlan [i]);
/* creating demolitionStack, taking some of the contents from the buildingStack, one by one, and place them in demolitionStack */
Stack <String> demolitionStack =new Stack <String>(); while(buildingStack.size()>1)
demolitionStack.push(buildingStack.pop());
//printing the name of structures System.out.print(“buildingStack contains “); while(buildingStack.size()>0)
System.out.println(buildingStack.pop());
System.out.println(“demolitionStack contains “);
while(demolitionStack.size()>0)
System.out.println(demolitionStack.pop());
} // end of main method
} // end of class
Question 8 6 Marks
The following InsuranceClaim class is incomplete. You need to complete the missing lines of code in
- toString() method
- inner class – Approval
- main method
The expected output is as follows:
Claim Amount: 4500.00 for Claim Id: 1001 has not been approved
Claim Amount: 4500.00 for Claim Id: 1002 has been approved
Note:
An insurance claim is approved only when the claim amount is not exceeding the insured amount.
public class InsuranceClaim {
private double insuredAmount;
private double claimAmount;
private int claimId;
boolean approved; // for approve or reject the claim by desk verification
//constructor
public InsuranceClaim(double insuredAmount, double claimAmount, int claimId) {
this.insuredAmount = insuredAmount;
this.claimAmount = claimAmount;
this.claimId = claimId;
new Approval().deskVerify();
}
@Override
public String toString() {
// Student needs to complete the missing lines of code
}
class Approval {
/*Complete the deskVerify() method given below. If the claim amount does not exceed the insured amount, it can be approved; otherwise, it is not approved. To change the instance variable ‘approved’ accordingly.
*/
void deskVerify(){
// Student needs to complete the missing lines of code
}
}
public static void main (String [] args) {
/*Student needs to complete the missing lines of code
write code to create an InsuranceClaim object with parameters such that the output
“Claim Amount: 4500.00 for Claim Id: 1001 has not been approved” is produced.
*/
InsuranceClaim myCalim = new
System.out.println(
/* Student needs to complete the missing lines of code
write code to create an InsuranceClaim object with parameters such that the output
“Claim Amount: 4500.00 for Claim Id: 1002 has been approved” is produced.
*/
InsuranceClaim yourCalim = new
System.out.println(
}
}
Question 9 4 Marks
The ShapeTest class contains incomplete code in the main method. You need to complete the missing lines of code to test the polymorphic behaviour by calling the calculateArea() method appropriately.
// an interface interface Shape {
public double calculateArea();
}
//Rectangle class
class Rectangle implements Shape {
// fields/variables double length; double width;
//constructor
public Rectangle(double length, double width) { setLength(length);
setWidth(width);
}
//getters and setters
public double getLength() { return length;
}
public void setLength(double length) { if(length > 0)
this.length = length;
}
public double getWidth() { return width;
}
public void setWidth(double width) { if(width > 0)
this.width = width;
}
// returning the area of rectangle public double calculateArea(){
return length * width;
}
}// end of Rectangle class
//Circle class
class Circle implements Shape {
// fields/variables double radius;
//constructor
public Circle(double radius) { setRadius(radius);
}
//getters and setters
public double getRadius() { return radius;
}
public void setRadius(double radius) {
if(radius > 0) this.radius = radius;
else
this.radius = 0.0;
}
// returning area of circle public double calculateArea()
{
return Math.PI * radius * radius;
}
}
// to test the objects of Rectangle and Circle public class ShapeTest {
public static void main(String [] args){ Shape [ ] diagrams = new Shape [2];
/* Store the references to one rectangle and one circle shape objects in the above-mentioned ‘diagrams’ array.
Loop through the ‘diagrams’ array and invoke the calculateArea() method of the two shape objects stored in the array to test the polymorphic behavior.
*/
//Missing lines of code need to be completed by the student
}
}
Question 10 4 Marks
Write short notes on the following. Your answer should have maximum three sentences for each of the following:
- Generic method
- Generic class
- raw type and upper bound