Java Reference
In-Depth Information
Discussion
We designed four classes that create shapes in a graphics window. They
form a chain, moving from the abstract, in which no shape but only a position is
described, down to more and more restrictive shapes. This is the nature of the
object-oriented approach. As one proceeds down a hierarchy of classes, one
encounters more and more properties and restrictions.
We could design other shape classes. For example, a rectangle is a parallel-
ogram in which the angles are equal (
90
degrees), so we could have a subclass
Rectangle
of
Parallelogram
. That brings up a question: A square is a rectan-
gle whose sides are equal, and a square is a rhombus whose angles are equal;
should class
Square
be a subclass of
Rectangle
or of
Rhombus
? It cannot be
both because “multiple inheritance” —inheriting from two difference super-
classes— is not allowed in Java. This is a situation where the subclassing feature
of Java cannot be made to model the problem domain exactly.
Java does have another feature, the
interface
, which could be used to model
the situation with rectangle, rhombus, and square more exactly. See Chap. 12.
The actual implementation of these classes is straightforward, and we leave
them to you. Also, the implementation can be found on the CD
ProgramLive
.
Using the shape classes
Activity 4-4.4 of the CD discusses a Java program that uses the shape class-
es to draw a figure like the one shown to the left. The design of the figure was
done with pencil and paper, away from the computer. We drew the figure and
determined what variables were needed and what they would represent.
Attempting to design the figure while on the computer would be inefficient.
The presence of the shape classes makes this figure fairly easy to draw —
imagine trying to draw it using only the original methods of class
Graphics
. And
yet, the classes themselves are quite short and simple. A good design will lead to
a simple, clear structure and a relatively simple program that is easy to use.
import
java.awt.*;
/**
A square that can be drawn
*/
public class
Square
extends
Rhombus {
/**
Constructor: a square with side length
l
and top-left corner
(x, y) */
public
Square(
int
x,
int
y,
int
l) { }
/**
draw this square using
Graphics g */
public void
drawShape(Graphics g) { }
/** =
a description of this square
*/
public
String toString()
{
return
""; }
}
Figure 4.13:
The design of class
Square
Search WWH ::
Custom Search