Sample Title Comes Here

Download Report

Transcript Sample Title Comes Here

Inheritance
In object-oriented programming, a mechanism called
inheritance is used to design two or more entities
that are different but share many common features.
First we define a class that contains the common
features of the entities. Then we define classes as an
extension of the common class
The common class is called the superclass and all
classes that inherit from it subclasses. The superclass
is an ancestor of the descendant subclass.
Sample Inheritance Hierarchy
Account
Savings
SuperSaver
Regular
Checking
Student
Interest
Bearing
ATM
Checking
Defining Classes with Inheritance
Suppose we want to model graduate and
undergraduate students in maintaining a class roster.
For both types of students we keep their name, three
test scores, and the final course grade. The formula for
deriving the final course grades are different for
undergraduate and graduate students.
How shall we implement the two types of students?
Student with Two Subclasses
Student
We will define three classes:
NUM_OF_TESTS
3
Student
courseGrade
setTestScore
name
getTestScore
test[ ]
GraduateStudent
computeGrade
Student
GraduateStudent
UndergraduateStudent
…
Implementation of
computeGrade is unique
to each subclass.
UndergraduateStudent
computeGrade
Inheritance
Subclasses inherit from their superclass
Everything that's in the superclass, and not in the
subclass, is inherited by the subclass
If a subclass defined something that is in the
superclass, the subclass elements override the
superclass elements
Objects created from the subclass consist of the
inherited components and any new components
defined in the subclass
Accessng Superclass Data and Methods
Constructors of a subclass can call constructors of
their superclass using super()
If a subclass constructor does not call the
superclass constructor, then the compiler adds a
call.
Components of a superclass that have been
overridden in a subclass can be accessed using
super.<the component>
Example Program
Ding … out to reality … Student.java,
GraduateStudent.java,
UndergraduateStudent.java,
UseStudent1.java
Inheritance and Member Accessibility
Which members of a superclass
are accessible from its
subclasses?
Superclass
There is a third visibility
modifier called protected.
Subclass
public
private
protected
Access from the Subclass Methods
Public and protected elements of the superclass
(objects) are visible to its subclasses (objects).
mySub
Subclass
Superclass
accessible
inaccessible
Access from the Outside
Only the public elements are accessible from the
outside objects.
mySuper
Superclass
mySub
Subclass
Client
Superclass
test
Access from Another Instance
All elements of an object are accessible from other
instances of the same class.
anotherInstance
AClass
anInstance
AClass
Example Program
Dong … out to reality … HouseOccupant.java,
Human.java, Pet.java,
UseHouseOccupant.java
Polymorphism
Polymorphism allows a variable to refer to objects from different
(but related by inheritance) classes.
References to data or methods are correctly resolved according
to the object’s class.
Requires that the superclass have the inherited data or method
Student student;
student = new GraduateStudent();
student.computeGrade( );
Student student;
student = new UndergraduateStudent();
student.computeGrade( );
This will call the
method of
GraduateStudent
This will call the
method of
UndergraduateStudent
Creating the roster Array
Student
roster[ ] = new Student[40];
roster[0]
roster[1]
roster[2]
roster[3]
roster
GraduateStudent
=
=
=
=
new
new
new
new
GraduateStudent( );
UndergraduateStudent( );
UndergraduateStudent( );
GraduateStudent( );
0
UndergraduateStudent
1
2
UndergraduateStudent
3
4
GraduateStudent
roster is an array of
Student objects.
Create instances of
the subclasses of
Student.
36 37 38 39
Processing the roster Array
for (int i = 0; I < numberOfStudents; i++ ) {
roster[i].computeGrade( );
}
int undergradCount = 0;
for (int i = 0; i < numberOfStudents; i++ )
{
if ( roster[i] instanceOf
UndergraduateStudent ) {
undergradCount++;
}
}
Notice how the
polymorphism is used
here.
Use instanceOf to
determine the class
the object belongs to.
Example Programs
Dung … out to reality … Student.java,
GraduateStudent.java,
UndergraduateStudent.java,
UseStudent2.java
Abstract Classes
Often we want to place elements common to all
subclasses in their superclass.
But we do not want any instances to be created from
the superclass.
In such case, we designate the superclass as an
abstract class.
This is also a way to enforce existence of methods in
subclasses.
Abstract Methods
It is common for an abstract class to include an
abstract method that must be implemented by the
descendant classes.
If a class includes an abstract method, then it is
considered as an abstract class and must have the
abstract modifier in the class declaration.
Sample Abstract Class
abstract class Student
{
. . .
abstract public void computeGrade( );
. . .
}
Reserved word
abstract in the class
declaration.
Abstract method has
no method body.
class GraduateStudent extends Student
{
. . .
public void computeGrade( )
{
//method body comes here
}
. . .
}
Abstract method is
must be fully
implemented in the
descendant class.
Example Programs
Deng … out to reality … H2O.java, Ice.java,
Water.java, Steam.java, UseH2O.java