0% found this document useful (0 votes)
68 views50 pages

Protected: 2003 Prentice Hall, Inc. All Rights Reserved

The document describes object-oriented programming concepts related to inheritance, including superclasses, subclasses, and the relationship between them. It provides examples to illustrate key points, such as subclasses inheriting and extending the behaviors of superclasses. The chapter introduces inheritance and its benefits, describes how subclasses inherit from single and multiple superclasses, and defines protected access modifiers. Class hierarchies and inheritance examples are presented to demonstrate how inheritance works.
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
68 views50 pages

Protected: 2003 Prentice Hall, Inc. All Rights Reserved

The document describes object-oriented programming concepts related to inheritance, including superclasses, subclasses, and the relationship between them. It provides examples to illustrate key points, such as subclasses inheriting and extending the behaviors of superclasses. The chapter introduces inheritance and its benefits, describes how subclasses inherit from single and multiple superclasses, and defines protected access modifiers. Class hierarchies and inheritance examples are presented to demonstrate how inheritance works.
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 50

Chapter 9 - Object-Oriented 1

Programming: Inheritance
Outline
9.1 Introduction
9.2 Superclasses and Subclasses
9.3 protected Members
9.4 Relationship between Superclasses and Subclasses
9.5 Case Study: Three-Level Inheritance Hierarchy
9.6 Constructors and Finalizers in Subclasses
9.7 Software Engineering with Inheritance

 2003 Prentice Hall, Inc. All rights reserved.


2

9.1 Introduction

• Inheritance
– Software reusability
– Create new class from existing class
• Absorb existing class’s data and behaviors
• Enhance with new capabilities
– Subclass extends superclass
• Subclass
– More specialized group of objects
– Behaviors inherited from superclass
• Can customize
– Additional behaviors

 2003 Prentice Hall, Inc. All rights reserved.


3

9.1 Introduction

• Class hierarchy
– Direct superclass
• Inherited explicitly (one level up hierarchy)
– Indirect superclass
• Inherited two or more levels up hierarchy
– Single inheritance
• Inherits from one superclass
– Multiple inheritance
• Inherits from multiple superclasses
– Java does not support multiple inheritance

 2003 Prentice Hall, Inc. All rights reserved.


4

9.1 Introduction

• Abstraction
– Focus on commonalities among objects in system
• “is-a” vs. “has-a”
– “is-a”
• Inheritance
• subclass object treated as superclass object
• Example: Car is a vehicle
– Vehicle properties/behaviors also car properties/behaviors
– “has-a”
• Composition
• Object contains one or more objects of other classes as
members
• Example: Car has a steering wheel

 2003 Prentice Hall, Inc. All rights reserved.


5

9.2 Superclasses and Subclasses


• Superclasses and subclasses
– Object of one class “is an” object of another class
• Example: Rectangle is quadrilateral.
– Class Rectangle inherits from class Quadrilateral
– Quadrilateral: superclass
– Rectangle: subclass
– Superclass typically represents larger set of objects than
subclasses
• Example:
– superclass: Vehicle
• Cars, trucks, boats, bicycles, …
– subclass: Car
• Smaller, more-specific subset of vehicles

 2003 Prentice Hall, Inc. All rights reserved.


6

9.2 Superclasses and Subclasses (Cont.)

• Inheritance examples
Superclass Subclasses
Student GraduateStudent,
UndergraduateStudent
Shape Circle, Triangle, Rectangle
Loan CarLoan, HomeImprovementLoan,
MortgageLoan
Employee Faculty, Staff
BankAccount CheckingAccount,
SavingsAccount
Fig. 9.1 Inheritance examples.

 2003 Prentice Hall, Inc. All rights reserved.


7

9.2 Superclasses and Subclasses (Cont.)

• Inheritance hierarchy
– Inheritance relationships: tree-like hierarchy structure
– Each class becomes
• superclass
– Supply data/behaviors to other classes
OR
• subclass
– Inherit data/behaviors from other classes

 2003 Prentice Hall, Inc. All rights reserved.


8

CommunityMember

Employee Student Alumnus

Faculty Staff

Administrator Teacher

Fig. 9.2 Inheritance hierarchy for university CommunityMembers.

 2003 Prentice Hall, Inc. All rights reserved.


9

Shape

TwoDimensionalShape ThreeDimensionalShape

Circle Square Triangle Sphere Cube Tetrahedron

Fig. 9.3 Inheritance hierarchy for Shapes.

 2003 Prentice Hall, Inc. All rights reserved.


10

9.3 protected Members

• protected access
– Intermediate level of protection between public and
private
– protected members accessible to
• superclass members
• subclass members
• Class members in the same package
– Subclass access superclass member
• Keyword super and a dot (.)

 2003 Prentice Hall, Inc. All rights reserved.


11
9.4 Relationship between Superclasses and
Subclasses
• Superclass and subclass relationship
– Example: Point/circle inheritance hierarchy
• Point
– x-y coordinate pair
• Circle
– x-y coordinate pair
– Radius

 2003 Prentice Hall, Inc. All rights reserved.


1 // Fig. 9.4: Point.java
2 Maintain
// Point class declaration represents and y-
an x-yx-coordinate pair. Outline
3
coordinates as private
4 public class Point {
instance variables.
5 private int x; // x part of coordinate pair Point.java
6 private int y; // y part of coordinate pair
7 Lines 5-6
8 // no-argument constructor Implicit call to
Maintain x- and y-
9 public Point() Object constructor
coordinates as private
10 {
11 // implicit call to Object constructor occurs here
instance variables.
12 }
13 Line 11
14 // constructor Implicit call to Object
15 public Point( int xValue, int yValue ) constructor
16 {
17 // implicit call to Object constructor occurs here
18 x = xValue; // no need for validation
19 y = yValue; // no need for validation
20 }
21
22 // set x in coordinate pair
23 public void setX( int xValue )
24 {
25 x = xValue; // no need for validation
26 }
27

 2003 Prentice Hall, Inc.


All rights reserved.
28 // return x from coordinate pair
29 public int getX() Outline
30 {
31 return x;
32 } Point.java
33
34 // set y in coordinate pair Lines 47-50
35 public void setY( int yValue ) Override method
36 {
toString of class
37 y = yValue; // no need for validation
38 }
Object.
39
40 // return y from coordinate pair
41 public int getY()
42 {
43 return y;
44 } Override method toString
45 of class Object
46 // return String representation of Point object
47 public String toString()
48 {
49 return "[" + x + ", " + y + "]";
50 }
51
52 } // end class Point

 2003 Prentice Hall, Inc.


All rights reserved.
1 // Fig. 9.5: PointTest.java
2 // Testing class Point. Outline
3 import javax.swing.JOptionPane;
4
5 public class PointTest { PointTest.java
6 Instantiate Point object
7 public static void main( String[] args ) Line 9
8 { Instantiate Point
9 Point point = new Point( 72, 115 ); // create Point object
object
10
11 // get point coordinates
12 String output = "X coordinate is " + Change
point.getX() + Lines 15-16
the value of point’s x-
13 "\nY coordinate is " + point.getY(); Change the value of
and y- coordinates
14 point’s x- and y-
15 point.setX( 10 ); // set x-coordinate coordinates
Implicitly call point’s
16 point.setY( 20 ); // set y-coordinate
toString method
17 Line 19
18 // get String representation of new point value Implicitly call point’s
19 output += "\n\nThe new location of point is " + point;
toString method
20
21 JOptionPane.showMessageDialog( null, output ); // display output
22
23 System.exit( 0 );
24
25 } // end main
26
27 } // end class PointTest

 2003 Prentice Hall, Inc.


All rights reserved.
1 // Fig. 9.6: Circle.java
2 // Circle class contains x-y coordinate pair and radius. Outline
3
4 public class Circle { Maintain x-y coordinates and
5 private int x; // radiusofasCircle's
x-coordinate privatecenter Circle.java
6 private int y; // instance of
y-coordinate variables.
Circle's center
7 private double radius; // Circle's radius Lines 5-7
8 Maintain x- and y-
9 // no-argument constructor
coordinates and radius
10 public Circle()
11 {
as private instance
12 // implicit call to Object constructor occurs here variables.
13 }
14 Lines 25-28
15 // constructor Note code similar to
16 public Circle( int xValue, int yValue, double radiusValue ) Point code.
17 {
18 // implicit call to Object constructor occurs here
19 x = xValue; // no need for validation
20 y = yValue; // no need for validation
21 setRadius( radiusValue );
22 }
23
24 // set x in coordinate pair
25 public void setX( int xValue )
26 {
27 x = xValue; // no need for validation Note code similar to Point
28 } code.
29
 2003 Prentice Hall, Inc.
All rights reserved.
30 // return x from coordinate pair
31 public int getX() Outline
32 {
33 return x;
34 }
35 Note code similar to Point Circle.java
36 // set y in coordinate pair code.
37 public void setY( int yValue ) Lines 31-47
38 { Note code similar to
39 y = yValue; // no need for validation Point code.
40 }
41
42 // return y from coordinate pair Line 51
43 public int getY() Ensure non-negative
44 { value for radius.
45 return y;
46 }
47
48 // set radius
49 public void setRadius( double radiusValue )
50 {
51 radius = ( radiusValue < 0.0 ? 0.0 : radiusValue );
52 }
53
54 // return radius
55 public double getRadius() Ensure non-negative value for
56 { radius.
57 return radius;
58 }
59

 2003 Prentice Hall, Inc.


All rights reserved.
60 // calculate and return diameter
61 public double getDiameter() Outline
62 {
63 return 2 * radius;
64 } Circle.java
65
66 // calculate and return circumference
67 public double getCircumference()
68 {
69 return Math.PI * getDiameter();
70 }
71
72 // calculate and return area
73 public double getArea()
74 {
75 return Math.PI * radius * radius;
76 }
77
78 // return String representation of Circle object
79 public String toString()
80 {
81 return "Center = [" + x + ", " + y + "]; Radius = " + radius;
82 }
83
84 } // end class Circle

 2003 Prentice Hall, Inc.


All rights reserved.
1 // Fig. 9.7: CircleTest.java Outline
2 // Testing class Circle.
3 import java.text.DecimalFormat;
4 import javax.swing.JOptionPane; CircleTest.java
5
6 public class CircleTest { Create Circle object.
7 Line 10
8 public static void main( String[] args ) Create Circle object
9 {
10 Circle circle = new Circle( 37, 43, 2.5 ); // create Circle object
Lines 17-19
11
12 // get Circle's initial x-y coordinates and radius
Use set methods to
13 String output = "X coordinate is " + circle.getX() + modify private
14 "\nY coordinate is " + circle.getY() + instance variable
15 "\nRadius is " + circle.getRadius();
16
Line 23
17 circle.setX( 35 ); // set new x-coordinate
18 circle.setY( 20 ); // set new y-coordinate
Explicitly call circle’s
19 circle.setRadius( 4.25 ); // set new radius toString method
20
Explicitly call circle’s
21 // get String representation of new toString
Use
circle setmethod
value methods to modify
22 output += "\n\nThe new location and radius of circleinstance
private are\n" +variable.
23 circle.toString();
24
25 // format floating-point values with 2 digits of precision
26 DecimalFormat twoDigits = new DecimalFormat( "0.00" );
27

 2003 Prentice Hall, Inc.


All rights reserved.
28 // get Circle's diameter Outline
29 output += "\nDiameter is " +
30 twoDigits.format( circle.getDiameter() );
31 CircleTest.java
32 // get Circle's circumference
Use get methods to
33
obtainLines 29-37
output += "\nCircumference is " +
circle’s diameter,
34 twoDigits.format( circle.getCircumference() );
35
circumference and area.
Use get methods to
36 // get Circle's area
obtain circle’s
37 output += "\nArea is " + twoDigits.format( circle.getArea() );
38
diameter,
39 JOptionPane.showMessageDialog( null, output ); // display output circumference and
40 area.
41 System.exit( 0 );
42
43 } // end main
44
45 } // end class CircleTest

 2003 Prentice Hall, Inc.


All rights reserved.
1 // Fig. 9.8: Circle2.java
Class Circle2 Outline
2 // Circle2 class inherits from Point.
3
extends class Point.
4 public class Circle2 extends Point { Circle2.java
5 private double radius; // Circle2's radius
6 Maintain private instance Line 4
7 // no-argument constructor
8 public Circle2()
variable radius. Class Circle2
9 { extends class Point.
10 // implicit call to Point constructor occurs here
11 }
12
Line 5
13 // constructor Maintain private
Attempting to access superclass
14 public Circle2( int xValue, int yValue, double radiusValue ) instance variable
Point’s private instance
15 { radius.
16 variables
// implicit call to Point constructor and y results in syntax
occursxhere
17 errors.
x = xValue; // not allowed: x private in Point
18 y = yValue; // not allowed: y private in Point
Lines 17-18
19 setRadius( radiusValue ); Attempting to access
20 } superclass Point’s
21 private instance
22 // set radius
variables x and y
23 public void setRadius( double radiusValue )
24 {
results in syntax
25 radius = ( radiusValue < 0.0 ? 0.0 : radiusValue ); errors.
26 }
27

 2003 Prentice Hall, Inc.


All rights reserved.
34 // calculate and return diameter Outline
35 public double getDiameter()
36 {
37 return 2 * radius; Circle2.java
38 }
39
40 // calculate and return circumference Line 56
41 public double getCircumference() Attempting to access
42 { superclass Point’s
43 return Math.PI * getDiameter();
private instance
44 }
45
variables x and y
46 // calculate and return area results in syntax
47 public double getArea() errors.
48 {
49 return Math.PI * radius * radius;
50 }
51 Attempting to access superclass
52 // return String representation of Circle object
Point’s private instance
53 public String toString()
54 { variables x and y results in
55 // use of x and y not allowed: x and y privatesyntax errors.
in Point
56 return "Center = [" + x + ", " + y + "]; Radius = " + radius;
57 }
58
59 } // end class Circle2

 2003 Prentice Hall, Inc.


All rights reserved.
Outline
Circle2.java:17: x has private access in Point
x = xValue; // not allowed: x private in Point
Circle2.java
^ output
Circle2.java:18: y has private access in Point
y = yValue; // not allowed: y private in Point Attempting to access
^ superclass Point’s
Circle2.java:56: x has private access in Point private instance
return "Center = [" + x + ", " + y + "]; Radius = " + radius; variables x and y
^
results in syntax
Circle2.java:56: y has private access in Point
errors.
return "Center = [" + x + ", " + y + "]; Radius = " + radius;
^
4 errors

Attempting to access
superclass Point’s
private instance variables
x and y results in syntax
errors.

 2003 Prentice Hall, Inc.


All rights reserved.
1 // Fig. 9.9: Point2.java
2 // Point2 class declaration represents an x-y coordinate pair.
Maintain x- and y- Outline
3
4 public class Point2 { coordinates as protected
5 protected int x; // x part of instancepair
coordinate variables, accessible Point2.java
6 protected int y; // y part of to subclasses.
coordinate pair
7 Lines 5-6
8 // no-argument constructor Maintain x- and y-
9 public Point2()
coordinates as
10 {
11 // implicit call to Object constructor occurs here
protected instance
12 } variables, accessible to
13 subclasses.
14 // constructor
15 public Point2( int xValue, int yValue )
16 {
17 // implicit call to Object constructor occurs here
18 x = xValue; // no need for validation
19 y = yValue; // no need for validation
20 }
21
22 // set x in coordinate pair
23 public void setX( int xValue )
24 {
25 x = xValue; // no need for validation
26 }
27

 2003 Prentice Hall, Inc.


All rights reserved.
28 // return x from coordinate pair
29 public int getX() Outline
30 {
31 return x;
32 } Point2.java
33
34 // set y in coordinate pair
35 public void setY( int yValue )
36 {
37 y = yValue; // no need for validation
38 }
39
40 // return y from coordinate pair
41 public int getY()
42 {
43 return y;
44 }
45
46 // return String representation of Point2 object
47 public String toString()
48 {
49 return "[" + x + ", " + y + "]";
50 }
51
52 } // end class Point2

 2003 Prentice Hall, Inc.


All rights reserved.
1 // Fig. 9.10: Circle3.java
2 // Circle3 class inherits from Point2 and has Class
accessCircle3 inherits from
to Point2 Outline
3 // protected members x and y. class Point2.
Maintain private instance
4 variables radius.
5 public class Circle3 extends Point2 { Circle3.java
6 private double radius; // Circle3's radius Line 5
7 Class Circle3
8 // no-argument constructor inherits from class
9 public Circle3()
Point2.
10 {
11 // implicit call to Point2 constructor occurs here
12 } Line 6
13
Implicitly calls superclass’s Maintain private
14 // constructor default constructor. instance variables
15 public Circle3( int xValue, int Modify
yValue,inherited instance
double radiusValue ) radius.
16 { variables x and y, declared
17 // implicit call to Point2 constructor
protected occurs here
in superclass Lines 11 and 17
18 x = xValue; // no need for validation Implicitly call
Point2.
19 y = yValue; // no need for validation
superclass’s default
20 setRadius( radiusValue );
constructor.
21 }
22
23 // set radius Lines 18-19
24 public void setRadius( double radiusValue ) Modify inherited
25 { instance variables x
26 radius = ( radiusValue < 0.0 ? 0.0 : radiusValue ); and y, declared
27 } protected in
28 superclass Point2.
 2003 Prentice Hall, Inc.
All rights reserved.
29 // return radius
30 public double getRadius() Outline
31 {
32 return radius;
33 }
Circle3.java
34
35 // calculate and return diameter
36 public double getDiameter() Line 56
37 { Access inherited
38 return 2 * radius; instance variables x
39 }
and y, declared
40
41 // calculate and return circumference protected in
42 public double getCircumference() superclass Point2.
43 {
44 return Math.PI * getDiameter();
45 }
46
47 // calculate and return area
48 public double getArea()
49 {
50 return Math.PI * radius * radius;
Access inherited instance
51 }
52 variables x and y, declared
53 // return String representation of Circle3 object protected in superclass
54 public String toString() Point2.
55 {
56 return "Center = [" + x + ", " + y + "]; Radius = " + radius;
57 }
58
59 } // end class Circle3

 2003 Prentice Hall, Inc.


All rights reserved.
1 // Fig. 9.11: CircleTest3.java
2 // Testing class Circle3. Outline
3 import java.text.DecimalFormat;
4 import javax.swing.JOptionPane;
5 Circletest3.java
6 public class CircleTest3 { Line 11
7 Create Circle3 object.
8 public static void main( String[] args ) Create Circle3 object. Lines 14-15
9 { Use inherited get methods
10 // instantiate Circle object to access inherited
11 Circle3 circle = new Circle3( 37, 43, 2.5 ); protected instance
12 variables
Use inherited x and y.to
get methods
13 // get Circle3's initial x-y coordinates and radius Useaccess
Circle3 get method
variables
inherited x andtoy.
protected
access private Lineinstance
16
14 String output = "X coordinate is " + circle.getX() + instance variables x and y.
Use Circle3 get
15 "\nY coordinate is " + circle.getY() + variables.
method to access
16 "\nRadius is " + circle.getRadius();
private instance
17
variables.
18 circle.setX( 35 ); // set new x-coordinate
Lines 18-19
19 circle.setY( 20 ); // set new y-coordinate
Use inherited set methods
20 circle.setRadius( 4.25 ); // set new radiusUse inherited set methods to
to modify inherited
21 modify inherited protected data x and y.
22 // get String representation of new circle protected
value data
Use Circle3 set method to x and y. Line 20
23 output += "\n\nThe new location and radius of circle are\n" + Use Circle3 set
modify private data
24 circle.toString(); method to modify
25
radius.
private data radius.

 2003 Prentice Hall, Inc.


All rights reserved.
26 // format floating-point values with 2 digits of precision Outline
27 DecimalFormat twoDigits = new DecimalFormat( "0.00" );
28
29 // get Circle's diameter Circletest3.jav
30 output += "\nDiameter is " + a
31 twoDigits.format( circle.getDiameter() );
32
33 // get Circle's circumference
34 output += "\nCircumference is " +
35 twoDigits.format( circle.getCircumference() );
36
37 // get Circle's area
38 output += "\nArea is " + twoDigits.format( circle.getArea() );
39
40 JOptionPane.showMessageDialog( null, output ); // display output
41
42 System.exit( 0 );
43
44 } // end method main
45
46 } // end class CircleTest3

 2003 Prentice Hall, Inc.


All rights reserved.
29
9.4 Relationship between Superclasses and
Subclasses (Cont.)
• Using protected instance variables
– Advantages
• subclasses can modify values directly
• Slight increase in performance
– Avoid set/get function call overhead
– Disadvantages
• No validity checking
– subclass can assign illegal value
• Implementation dependent
– subclass methods more likely dependent on superclass
implementation
– superclass implementation changes may result in subclass
modifications
• Fragile (brittle) software
 2003 Prentice Hall, Inc. All rights reserved.
1 // Fig. 9.12: Point3.java
2 // Point class declaration represents an x-y coordinate pair.
Better software-engineering
Outline
3
4 public class Point3 { practice: private over
5 private int x; // x part of coordinate pair when possible.
protected Point3.java
6 private int y; // y part of coordinate pair
7 Lines 5-6
8 // no-argument constructor Better software-
9 public Point3()
engineering practice:
10 {
11 // implicit call to Object constructor occurs here
private over
12 } protected when
13 possible.
14 // constructor
15 public Point3( int xValue, int yValue )
16 {
17 // implicit call to Object constructor occurs here
18 x = xValue; // no need for validation
19 y = yValue; // no need for validation
20 }
21
22 // set x in coordinate pair
23 public void setX( int xValue )
24 {
25 x = xValue; // no need for validation
26 }
27

 2003 Prentice Hall, Inc.


All rights reserved.
28 // return x from coordinate pair
29 public int getX() Outline
30 {
31 return x;
32 } Point3.java
33
34 // set y in coordinate pair Line 49
35 public void setY( int yValue ) Invoke public
36 {
methods to access
37 y = yValue; // no need for validation
38 }
private instance
39 variables.
40 // return y from coordinate pair
41 public int getY()
42 {
43 return y;
44 }
45 Invoke public methods to access
46 // return String representation of Point3 private instance variables.
object
47 public String toString()
48 {
49 return "[" + getX() + ", " + getY() + "]";
50 }
51
52 } // end class Point3

 2003 Prentice Hall, Inc.


All rights reserved.
1 // Fig. 9.13: Circle4.java
Class Circle4 inherits from
2 // Circle4 class inherits from Point3 and accesses Point3's
class Point3.
Outline
3 // private x and y via Point3's public methods.
4 Maintain private instance
5 public class Circle4 extends Point3 { variable radius. Circle4.java
6
7 private double radius; // Circle4's radius Line 5
8 Class Circle4
9 // no-argument constructor
inherits from class
10 public Circle4()
11 {
Point3.
12 // implicit call to Point3 constructor occurs here
13 } Line 7
14 Maintain private
15 // constructor instance variable
16 public Circle4( int xValue, int yValue, double radiusValue ) radius.
17 {
18 super( xValue, yValue ); // call Point3 constructor explicitly
19 setRadius( radiusValue );
20 }
21
22 // set radius
23 public void setRadius( double radiusValue )
24 {
25 radius = ( radiusValue < 0.0 ? 0.0 : radiusValue );
26 }
27

 2003 Prentice Hall, Inc.


All rights reserved.
28 // return radius
29 public double getRadius() Outline
30 {
31 return radius;
32 }
Circle4.java
33
34 // calculate and return diameter
35 public double getDiameter() Line 37, 49 and 55
36 { Invoke method
37 return 2 * getRadius(); getRadius rather
38 }
than directly accessing
39
40 // calculate and return circumference instance variable
41 public double getCircumference() Invoke method getRadius radius.
42 { rather than directly accessing
43 return Math.PI * getDiameter();
instance variable radius. Lines 53-56
44 }
Redefine class
45
46 // calculate and return area Point3’s method
47 public double getArea() toString.
48 {
49 return Math.PI * getRadius() * getRadius();
50 } Redefineclass Point3’s
51 method toString.
52 // return String representation of Circle4 object
53 public String toString()
54 {
55 return "Center = " + super.toString() + "; Radius = " + getRadius();
56 }
57
58 } // end class Circle4

 2003 Prentice Hall, Inc.


All rights reserved.
1 // Fig. 9.14: CircleTest4.java
2 // Testing class Circle4. Outline
3 import java.text.DecimalFormat;
4 import javax.swing.JOptionPane;
5 Circletest4.java
6 public class CircleTest4 { Line 11
7 Create Circle4 object.
Create Circle4 object. Lines 14 and 15
8 public static void main( String[] args )
9 { Use inherited get methods
10 // instantiate Circle object to access inherited
11 Circle4 circle = new Circle4( 37, 43, 2.5 ); Use inherited get methods
private to
instance
12 access inheritedvariables
privatex and y.
instance Linex16
variables and y. to
13 // get Circle4's initial x-y coordinates and radius Use Circle4 get method
14
Use Circle4 get
String output = "X coordinate is " + circle.getX() + access private instance
method to access
15 "\nY coordinate is " + circle.getY() +
variable radius.private instance
16 "\nRadius is " + circle.getRadius();
variable radius.
17
Lines 18-19
18 circle.setX( 35 ); // set new x-coordinate
Use inherited seta
19 circle.setY( 20 ); // set new y-coordinate
Use inherited seta methods to methods to modify
20 circle.setRadius( 4.25 ); // set new radius
21
modify inherited private inherited private
22 instance
// get String representation of new circleUse variables
Circle4
value x and y.to instance variables x and
set method y.
23 output += "\n\nThe new location and radiusmodify private
of circle are\n" instance
+ Line 20
24 circle.toString(); variable radius. Use Circle4 set
25 method to modify
private instance
variable radius.

 2003 Prentice Hall, Inc.


All rights reserved.
26 // format floating-point values with 2 digits of precision Outline
27 DecimalFormat twoDigits = new DecimalFormat( "0.00" );
28
29 // get Circle's diameter Circletest4.jav
30 output += "\nDiameter is " + a
31 twoDigits.format( circle.getDiameter() );
32
33 // get Circle's circumference
34 output += "\nCircumference is " +
35 twoDigits.format( circle.getCircumference() );
36
37 // get Circle's area
38 output += "\nArea is " + twoDigits.format( circle.getArea() );
39
40 JOptionPane.showMessageDialog( null, output ); // display output
41
42 System.exit( 0 );
43
44 } // end main
45
46 } // end class CircleTest4

 2003 Prentice Hall, Inc.


All rights reserved.
36
9.5 Case Study: Three-Level Inheritance
Hierarchy
• Three level point/circle/cylinder hierarchy
– Point
• x-y coordinate pair
– Circle
• x-y coordinate pair
• Radius
– Cylinder
• x-y coordinate pair
• Radius
• Height

 2003 Prentice Hall, Inc. All rights reserved.


1 // Fig. 9.15: Cylinder.java Maintain private instance Outline
2 // Cylinder class inherits from Circle4. variable height.
3
4 public class Cylinder extends Circle4 { Cylinder.java
5 private double height; // Cylinder's height
6
Class Cylinder extends Line 4
7 // no-argument constructor
8 public Cylinder()
class Circle4. Class Cylinder
9 { extends class
10 // implicit call to Circle4 constructor occurs here
Circle4.
11 }
12
13 // constructor Line 5
14 public Cylinder( int xValue, int yValue, double radiusValue, Maintain private
15 double heightValue ) instance variable
16 {
height.
17 super( xValue, yValue, radiusValue ); // call Circle4 constructor
18 setHeight( heightValue );
19 }
20
21 // set Cylinder's height
22 public void setHeight( double heightValue )
23 {
24 height = ( heightValue < 0.0 ? 0.0 : heightValue );
25 }
26

 2003 Prentice Hall, Inc.


All rights reserved.
27 // get Cylinder's height
28 public double getHeight() Outline
29 {
30 return height;
31 } Redefine superclass Cylinder.java
32 Circle4’s method
33 Invoke superclass Line 34 and 42
// override Circle4 method getArea tocalculate to return
Cylinder
getArea area
34 public double getArea() Circle4’s getArea Redefine superclass
Cylinder surface area. Circle4’s method
35 { method using keyword super.
36 return 2 * super.getArea() + getCircumference() * getHeight(); getArea to return
37 } Cylinder surface area.
38
39 // calculate Cylinder volume Line 36
40 public double getVolume()
Invoke superclass
41 {
Circle4’s getArea
method using keyword
42 return super.getArea() * getHeight();
Redefine class Circle4’s super.
43 }
44 method toString. Lines 46-49
45 // return String representation ofCylinder Invoke
object superclass
Redefine class
46 public String toString() Circle4’s toString
Circle4’s method
47 { method using keyword super. toString.
48 return super.toString() + "; Height = " + getHeight();
49 } Line 48
50 Invoke superclass
51 } // end class Cylinder Circle4’s toString
method using keyword
super.

 2003 Prentice Hall, Inc.


All rights reserved.
1 // Fig. 9.16: CylinderTest.java
2 // Testing class Cylinder. Outline
3 import java.text.DecimalFormat;
4 import javax.swing.JOptionPane;
5 CylinderTest.java
6 public class CylinderTest { Lines 14 and 15
7 Invoke indirectly
8 public static void main( String[] args ) inherited Point3 get
9 { methods.
10 // create Cylinder object Line 16
11 Cylinder cylinder = new Cylinder( 12, 23, 2.5, 5.7 ); Invoke indirectlyInvoke directly inherited
inherited
12 Circle4 get method.
Point3 get methods.
13 Invoke
// get Cylinder's initial x-y coordinates, directly
radius inherited
and height Line 16get method.
Invoke Cylinder
Invoke Cylinder get
14 Circle4 get+method.
String output = "X coordinate is " + cylinder.getX()
15 "\nY coordinate is " + cylinder.getY() + "\nRadius is " +
method.
Lines 18-19
16 cylinder.getRadius() + "\nHeight is " + cylinder.getHeight();
Invoke indirectly
17
inherited Point3 set
18 cylinder.setX( 35 ); // set new x-coordinate
Invoke indirectly inherited methods.
19 cylinder.setY( 20 ); // set new y-coordinate
Point3 set methods. Line 20
20 cylinder.setRadius( 4.25 ); // set new radius
Invoke directly inherited
21 cylinder.setHeight( 10.75 ); // set new Invoke
height directly inherited
Circle4 set method.
22 Circle4 set method. Line 21
Invoke Cylinder set
23 // get String representation of new cylinder value Invoke Cylinder set
24 output +=
method.
method.
25 "\n\nThe new location, radius and height of cylinder are\n" + Line 26
26 cylinder.toString(); Invoke overridden
27 Invoke overridden toString method.
toString method. method.

 2003 Prentice Hall, Inc.


All rights reserved.
28 // format floating-point values with 2 digits of precision Outline
29 DecimalFormat twoDigits = new DecimalFormat( "0.00" );
30
31 // get Cylinder's diameter CylinderTest.ja
32 output += "\n\nDiameter is " +
33 twoDigits.format( cylinder.getDiameter() );
va
34
35 // get Cylinder's circumference Line 40
36 output += "\nCircumference is " + Invoke overridden
37 twoDigits.format( cylinder.getCircumference() );
getArea method.
38
39 // get Cylinder's area
40 output += "\nArea is " + twoDigits.format( cylinder.getArea() );
41
42 // get Cylinder's volume Invoke overridden getArea
43 output += "\nVolume is " + twoDigits.format( cylinder.getVolume()method.
);
44
45 JOptionPane.showMessageDialog( null, output ); // display output
46
47 System.exit( 0 );
48
49 } // end main
50
51 } // end class CylinderTest

 2003 Prentice Hall, Inc.


All rights reserved.
41

9.6 Constructors and Finalizers in Subclasses

• Instantiating subclass object


– Chain of constructor calls
• subclass constructor invokes superclass constructor
– Implicitly or explicitly
• Base of inheritance hierarchy
– Last constructor called in chain is Object’s constructor
– Original subclass constructor’s body finishes executing
last
– Example: Point3/Circle4/Cylinder hierarchy
• Point3 constructor called second last (last is
Object constructor)
• Point3 constructor’s body finishes execution
second (first is Object constructor’s body)

 2003 Prentice Hall, Inc. All rights reserved.


42
9.6 Constructors and Destructors in Derived
Classes
• Garbage collecting subclass object
– Chain of finalize method calls
• Reverse order of constructor chain
• Finalizer of subclass called first
• Finalizer of next superclass up hierarchy next
– Continue up hierarchy until final superreached
• After final superclass (Object) finalizer, object
removed from memory

 2003 Prentice Hall, Inc. All rights reserved.


1 // Fig. 9.17: Point.java
2 // Point class declaration represents an x-y coordinate pair. Outline
3
4 public class Point {
5 private int x; // x part of coordinate pair
Point.java
6 private int y; // y part of coordinate pair
7
8 // no-argument constructor Lines 12, 22 and 28
9 public Point() Constructor and
10 { finalizer output
11 // implicit call to Object constructor occurs here
messages to
12 System.out.println( "Point no-argument constructor: " + this );
13 } demonstrate method
14 call order.
15 // constructor Constructor and finalizer
16 public Point( int xValue, int yValue )
output messages to
17 {
18 // implicit call to Object constructor occurs here
demonstrate method call order.
19 x = xValue; // no need for validation
20 y = yValue; // no need for validation
21
22 System.out.println( "Point constructor: " + this );
23 }
24
25 // finalizer
26 protected void finalize()
27 {
28 System.out.println( "Point finalizer: " + this );
29 }
30

 2003 Prentice Hall, Inc.


All rights reserved.
31 // set x in coordinate pair
32 public void setX( int xValue ) Outline
33 {
34 x = xValue; // no need for validation
35 }
Point.java
36
37 // return x from coordinate pair
38 public int getX()
39 {
40 return x;
41 }
42
43 // set y in coordinate pair
44 public void setY( int yValue )
45 {
46 y = yValue; // no need for validation
47 }
48
49 // return y from coordinate pair
50 public int getY()
51 {
52 return y;
53 }
54
55 // return String representation of Point4 object
56 public String toString()
57 {
58 return "[" + getX() + ", " + getY() + "]";
59 }
60
61 } // end class Point

 2003 Prentice Hall, Inc.


All rights reserved.
1 // Fig. 9.18: Circle.java
2 // Circle5 class declaration. Outline
3
4 public class Circle extends Point {
5
Circle.java
6 private double radius; // Circle's radius
7
8 // no-argument constructor
9 public Circle() Lines 12, 21 and 29
10 { Constructor and
11 // implicit call to Point constructor occurs here
finalizer output
12 System.out.println( "Circle no-argument constructor: " + this );
13 } messages to
14 demonstrate method
Constructor and finalizer
15 // constructor call order.
16 public Circle( int xValue, int yValue, double radiusValue ) output messages to
17 { demonstrate method call order.
18 super( xValue, yValue ); // call Point constructor
19 setRadius( radiusValue );
20
21 System.out.println( "Circle constructor: " + this );
22 }
23
24 // finalizer
25 protected void finalize()
26 {
27 System.out.println( "Circle finalizer: " + this );
28
29 super.finalize(); // call superclass finalize method
30 }
31

 2003 Prentice Hall, Inc.


All rights reserved.
32 // set radius Outline
33 public void setRadius( double radiusValue )
34 {
35 radius = ( radiusValue < 0.0 ? 0.0 : radiusValue ); Circle.java
36 }
37
38 // return radius
39 public double getRadius()
40 {
41 return radius;
42 }
43
44 // calculate and return diameter
45 public double getDiameter()
46 {
47 return 2 * getRadius();
48 }
49
50 // calculate and return circumference
51 public double getCircumference()
52 {
53 return Math.PI * getDiameter();
54 }

 2003 Prentice Hall, Inc.


All rights reserved.
55 Outline
56 // calculate and return area
57 public double getArea()
58 { Circle.java
59 return Math.PI * getRadius() * getRadius();
60 }
61
62 // return String representation of Circle5 object
63 public String toString()
64 {
65 return "Center = " + super.toString() + "; Radius = " + getRadius();
66 }
67
68 } // end class Circle

 2003 Prentice Hall, Inc.


All rights reserved.
1 // Fig. 9.19: ConstructorFinalizerTest.java Outline
2 // Display order in which superclass and subclass
3 // constructors and finalizers are called.
4 ConstructorFina
5 public class ConstructorFinalizerTest { lizerTest.java
6
7 public static void main( String args[] ) Line 12
8 {
Point object goes in and out
of scope immediately. Point object goes in
9 Point point;
and out of scope
10 Circle circle1, circle2;
11
immediately.
Instantiate two Circle
12 point = new Point( 11, 22 );
13
objects to demonstrate order
Lines 15 and 18
14 System.out.println(); of subclass and superclass
Instantiate two
15 circle1 = new Circle( 72, 29, 4.5 ); constructor/finalizer
Circlemethod
objects to
16 calls. demonstrate order of
17 System.out.println(); subclass and
18 circle2 = new Circle( 5, 7, 10.67 );
superclass
19
constructor/finalizer
20 point = null; // mark for garbage collection
21 circle1 = null; // mark for garbage collection
method calls.
22 circle2 = null; // mark for garbage collection
23
24 System.out.println();
25

 2003 Prentice Hall, Inc.


All rights reserved.
26 System.gc(); // call the garbage collector Outline
27
28 } // end main
29 ConstructorFina
30 } // end class ConstructorFinalizerTest lizerTest.java
Subclass Circle constructor
Point constructor: [11, 22]
 
body executes after superclass
Point constructor: Center = [72, 29]; Radius = 0.0
Point4’s constructor
Circle constructor: Center = [72, 29]; Radius = 4.5 finishes execution.
 
Point constructor: Center = [5, 7]; Radius = 0.0
Circle constructor: Center = [5, 7]; Radius = 10.67 Finalizer for Circle object
  called in reverse order of
Point finalizer: [11, 22] constructors.
Circle finalizer: Center = [72, 29]; Radius = 4.5
Point finalizer: Center = [72, 29]; Radius = 4.5
Circle finalizer: Center = [5, 7]; Radius = 10.67
Point finalizer: Center = [5, 7]; Radius = 10.67

 2003 Prentice Hall, Inc.


All rights reserved.
50

9.9 Software Engineering with Inheritance

• Customizing existing software


– Inherit from existing classes
• Include additional members
• Redefine superclass members
• No direct access to superclass’s source code
– Link to object code
– Independent software vendors (ISVs)
• Develop proprietary code for sale/license
– Available in object-code format
• Users derive new classes
– Without accessing ISV proprietary source code

 2003 Prentice Hall, Inc. All rights reserved.

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy