Java Reference
In-Depth Information
7
8 System.out.println(
"The two objects have the same area? "
+
9
equalArea(geoObject1, geoObject2)
);
10
11
// Display circle
12 displayGeometricObject(geoObject1);
13
14
// Display rectangle
15 displayGeometricObject(geoObject2);
16 }
17
18
/** A method for comparing the areas of two geometric objects */
19
public static
20
boolean
equalArea(GeometricObject object1,
equalArea
GeometricObject object2)
{
21
return
object1.getArea() == object2.getArea();
22 }
23
24
/** A method for displaying a geometric object */
25
public static void
displayGeometricObject(GeometricObject object)
{
displayGeometricObject
26 System.out.println();
27 System.out.println(
"The area is "
+ object.getArea());
28 System.out.println(
"The perimeter is "
+ object.getPerimeter());
29 }
30 }
The two objects have the same area? false
The area is 78.53981633974483
The perimeter is 31.41592653589793
The area is 15.0
The perimeter is 16.0
The methods
getArea()
and
getPerimeter()
defined in the
GeometricObject
class
are overridden in the
Circle
class and the
Rectangle
class. The statements (lines 5-6)
GeometricObject geoObject1 =
new
Circle(
5
);
GeometricObject geoObject2 =
new
Rectangle(
5
,
3
);
create a new circle and rectangle and assign them to the variables
geoObject1
and
geoObject2
. These two variables are of the
GeometricObject
type.
When invoking
equalArea(geoObject1, geoObject2)
(line 9), the
getArea()
method defined in the
Circle
class is used for
object1.getArea()
, since
geoObject1
is
a circle, and the
getArea()
method defined in the
Rectangle
class is used for
object2.getArea()
, since
geoObject2
is a rectangle.
Similarly, when invoking
displayGeometricObject(geoObject1)
(line 12), the
methods
getArea()
and
getPerimeter()
defined in the
Circle
class are used, and
when invoking
displayGeometricObject(geoObject2)
(line 15), the methods
getArea
and
getPerimeter
defined in the
Rectangle
class are used. The JVM dynami-
cally determines which of these methods to invoke at runtime, depending on the actual
object that invokes the method.
Note that you could not define the
equalArea
method for comparing whether two geo-
metric objects have the same area if the
getArea
method were not defined in
GeometricObject
. Now you have seen the benefits of defining the abstract methods in
GeometricObject
.
why abstract methods?