Explore BrainMass
Share

Polymorphism and abstract classes

This content was STOLEN from BrainMass.com - View the original, and get the already-completed solution here!

// --------------------------------
// ----- ENTER YOUR CODE HERE -----
// --------------------------------

// --------------------------------
// --------- END USER CODE --------
// --------------------------------

/**
Simple demo program that tests the stub methods of the Figure, Triangle,
and Rectangle classes.
*/
public class FigureDemo {

public static void main(String[] args) {
Figure f1 = new Figure(7, 7);
Figure t1 = new Triangle(5, 5, 5, 10);
Figure r1 = new Rectangle(15, 15, 5, 10);

System.out.println("Testing the draw() methods:");
f1.draw();
t1.draw();
r1.draw();
System.out.println();

System.out.println("Testing the center() methods:");
f1.center();
t1.center();
r1.center();
System.out.println();

System.out.println("Testing the erase() methods:");
f1.erase();
t1.erase();
r1.erase();
}

}

Consider a graphics system that has classes for various figures, say rectangles, boxes, triangles, circles and so on. For example, a rectangle might have data members height, width, and center point, while a box and circle might have only a center point and an edge length or radius respectively. In a well designed system these would be derived from a common class, Figure. You are to implement such a system.
The class Figure is the base class. You should add only Rectangle and Triangle classes derived from Figure. Each class has stubs for methods erase and draw. Each of these methods outputs a message telling the name of the class and what method has been called. Since these are just stubs, they do nothing more than output this message. The method center calls the erase and draw methods to erase and redraw the figure at the center. Since you have only stubs for erase and draw, center will not do any "centering" but will call the methods erase and draw which will allow you to see which versions of draw and center it calls. Also, add an output message in the method center that announces that center is being called. The methods should take no arguments. Also, define a demonstration program for your classes.
For a real example, you would have to replace the definition of each of these methods with code to do the actual drawing. You will be asked to do this in Programming Project 2.
In class Figure, you should define the following methods:
public Figure(int centerX, int centerY)
public void draw()
public void erase()
public void center()
public int getCenterX()
public void setCenterX(int centerX)
public int getCenterY()
public void setCenterY(int centerY)
public String toString()
public boolean equals(Object other)
In class Rectangle, you should define:
public Rectangle(int centerX, int centerY, int width, int height)
public void draw()
public void erase()
public int getWidth()
public void setWidth(int width)
public int getHeight()
public void setHeight(int height)
public String toString()
public boolean equals(Object other)
In Triangle, you should define:
public Triangle(int centerX, int centerY, int baseLength, int height)
public void draw()
public void erase()
public int getBaseLength()
public void setBaseLength(int baseLength)
public int getHeight()
public void setHeight(int height)
public String toString()
public boolean equals(Object other)

Since all Figures have a center point, the implementation of the center method in the Figure superclass could contain the logic for moving any Figure to the center of the display. It should therefore only be necessary to implement the center method in the Figure superclass, and not in any of the subclasses.

In order for your solution to compile and execute properly within CodeMate, you should not declare the Figure, Rectangle, and Triangle classes to be public. For example, instead of:
public class Figure {
// Implementation goes here...
}
you should declare the class as:
class Figure {
// Implementation goes here...
}
The constructors in your implementation of the Triangle and Rectangle subclasses should invoke the appropriate superclass constructor.

© BrainMass Inc. brainmass.com October 24, 2018, 10:58 pm ad1c9bdddf
https://brainmass.com/computer-science/graphics/176990

Attachments

Solution Summary

The solution examines polymorphism and abstract classes for a java file.

$2.19
See Also This Related BrainMass Solution

what is happening in the java code

QUESTION 1

public abstract class Account{
public abstract boolean open(double);
}
public class Checking extends Account{
public boolean open (double bal){
}
}

In the above code, what happens if open() is not declared in each subclass of Account?

Question 2
public class A{
private int i;
public void setI(int j){
i = j;
}

public class B{
private A a;
public A getA(){ return a; }
}

How do you access the value of i from the B class?

Question 3
Given the following code:

public class Exam {
private int [] list;
private int num;
Exam () { list = new int[100];}
public void addItem (int i)
{ list[num++] = i; }

// insert method here
}

Which of the following may be a violation of information hiding if inserted for the comment above?

Answer

A public int[] getList(){ return list; }
B None of the above

C public int[] getList(){int[] copy=new int[list.length]; for(int i = 0;i<num; i++) copy[i]=list[i]; return copy;}
D public int getAListValue (int index){ return list[index]; }

Question 4
Which of the following is true regarding subclasses?

Answer
A A subclass that inherits methods from its superclass may not override the methods.

B A subclass that inherits instance variables from its superclass may not declare additional instance variables.

C A subclass may inherit methods or instance variables from its superclass but not both.

D A subclass inherits methods and instance variables from its superclass, and may also implement its own methods and declare its own instance variables.

Question 5
Which of the following statements about an interface is true?

Answer
A An interface has instance variables but no methods.

B An interface has methods but no instance variables.

C An interface has neither methods nor instance variables.

D An interface has methods and instance variables.

Question 6
Which statement is true about a class that is marked with the keyword final:

Answer

A A class marked final will not compile unless at least one method is marked final

B You can instantiate only a subclass of a final class, not the final class itself
C You can extend a final class
D You can instantiate a final class

Question 7
What must a subclass do to modify a private superclass instance variable?

Answer

A The subclass must simply use the name of the superclass instance variable.

B The subclass must declare its own instance variable with the same name as the superclass instance variable.

C The subclass must use a public method of the superclass (if it exists) to update the superclass's private instance variable.

D The subclass must have its own public method to update the superclass's private instance variable.

Question 8
Consider the following class hierarchy:

public class Vehicle{
private String type;
public Vehicle(String type)
{
this.type = type; }
public String getType()
{
return type;
}
}
public class LandVehicle extends Vehicle
{
public LandVehicle(String type)
{
. . .

}

}
public class Auto extends LandVehicle
{
public Auto(String type)
{
. . .
}
}

Which of the following code fragments is NOT valid in Java?

Answer
A LandVehicle myAuto = new Auto("sedan");
B LandVehicle myAuto = new Vehicle("sedan");

C Auto myAuto = new Auto("sedan");
D Vehicle myAuto = new Auto("sedan");

Question 9
Consider the following code snippet:

Employee anEmployee = new Programmer();
anEmployee.increaseSalary(2500);

Assume that the Programmer class inherits from the Employee class, and both classes have an implementation of the increaseSalary method with the same set of parameters and the same return type. Which class's increaseSalary method is to be executed is determined by ____.

Answer

A the variable's type.
B it is not possible to determine which method is executed.
C the hierarchy of the classes.
D the actual object type.

Question 10
Consider the following code snippet:

if (anObject instanceof Auto)

{

Auto anAuto = (Auto) anObject;
. . .

}

What does this code do?

Answer
A This code tests whether anObject was created from a superclass of Auto.
B This code creates a subclass type object from a superclass type object.
C This code safely converts an object of type Auto or a subclass of Auto to an object of type Auto.
D This class safely converts an object of any type to an object of type Auto.

Question 11
Consider the following code snippet:

public void deposit(double amount)

{
transactionCount ++;

super.deposit(amount);

}

Which of the following statements is true?

Answer

A This method will call itself.
B This method calls a public method in its superclass.
C This method calls a public method in its subclass.
D This method calls a private method in its superclass

Question 12
If a super class named Pet and a sub class named Cat both have an instance method named methodOne() with the same method declarations, the Cat class would call methodOne() in the Pet class as follows:

Answer
A this.methodOne();
B Pet.methodOne();
C Cat.methodOne();
D super.methodOne();
E methodOne();

Question 13
Consider the following code snippet:

public class Motorcycle extends Vehicle
{
private String model;
. . .

public Motorcycle(int numberAxles, String modelName)
{
model = modelName;
super(numberAxles);

}
}

What does this code do?

Answer

A It invokes a private method of the Vehicle class from within a method of the Motorcycle class.
B It invokes the constructor of the Motorcycle class from within the constructor of the Vehicle class.
C This code will not compile.
D It invokes the constructor of the Vehicle class from within the constructor of the Motorcycle class.

Question 14
Select any statement in below that will generate an error if it replaces the comment

public class Person {
public String toString() { return "Person"; }
}

public class Student extends Person {
public String toString() { return "Student"; } }

public class GraduateStudent extends Student { }

public class Test {
public static void m(Student x) {
System.out.println(x.toString()); }

public static void main(String[ ] args) {

// Replace this comment with given statement
}
}

Answer

A m(new GraduateStudent());
B m(new Object());
C m(new Person());
D m(new Student());

Question 15

Fill in the blank to indicate either the type of error (be specific!) or the output produced by the code : var.m();
public class A {
public void m() {System.out.println ("m in class A");}

}
public class B extends A {
public void m() {System.out.println ("m in class B");}
}
public class Main {

public static void main (String [] args)

{

Object var = new B();

var.m();

// ____________________________

}
}

Answer

Question 16
Fill in the blank to indicate either the type of error (be specific!) or the output produced by the code: ((A)var).m();
public class A {
public void m() {System.out.println ("m in class A");}
}
public class B extends A {
public void m() {System.out.println ("m in class B");}
}
public class Main { public static void main (String [] args)
{ Object var = new B();

((A)var).m(); // ____________________________

}
}

Question 17
If a method in a subclass has the same signature as a method in the superclass, does the subclass method overload or override the superclass method?

Question 18
Given the following 3 data definition classes that will provide structure for a application to manage inventory at a store that sells Produce and Grocery items:

public abstract class Item {
String name; double cost;
public static final double TAX = .05;
public String getName() {return name;}
public double getCost() {return cost;}
public void setName(String n) { name = n;}
public boolean setCost (double c){
cost = c;
return (c > 0 && c < 100) ? true : false;

}

abstract public double amount() ;
public double total() {return amount() * (1+TAX); }
abstract public boolean sellItem (double amt) ;

}
public class Grocery extends Item {
private int quantity;
private static int numItems = 0;
public static int getNumItems() { return numItems; }
public boolean setQty (int q)

{

quantity = q;
return (q > 0 && q < 100) ? true : false;

}

public double amount () {return quantity * getCost();}
public boolean sellItem (double amt)

{

if (amt > quantity)

return false;

quantity -= (int) (amt+ .001);

return true;
}

Grocery () {numItems++;}

}

public class Produce extends Item {
private double weight;
private static int numItems = 0;
public static int getNumItems() { return numItems; }
public boolean setWeight(double w)

{

weight = w;
return (w > 0 && w < 10) ? true : false;

}

public double amount () {return weight * getCost(); }
public boolean sellItem (double amt)

{

if (amt > weight) return false;

weight -= amt;

return true;

} Produce () {numItems++;}

}

Give an example (by a short code segment and explanation) of how polymorphism would be implemented.

Question 19

A Java method doing Input/Output or other tasks may encounter errors that generate exceptions. In these cases, the Java method may wish to handle the exception itself.

If a Java method wants to handle an exception, how does it do this? Augment your answer with some Java code segments, to illustrate your explanation.

View Full Posting Details