220 likes | 486 Views
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.
E N D
Inheritance • In object-oriented programming, a mechanism called inheritance is usedto 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.
Account Savings Checking Regular Student Interest Bearing ATMChecking SuperSaver Sample Inheritance Hierarchy
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 NUM_OF_TESTS 3 Student courseGrade name test[ ] … UndergraduateStudent GraduateStudent getTestScore computeGrade computeGrade setTestScore Student with Two Subclasses We will define three classes: Student GraduateStudent UndergraduateStudent Implementation of computeGrade is unique to each subclass.
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
Superclass Subclass public private protected Inheritance and Member Accessibility • Which members of a superclass are accessible from its subclasses? • There is a third visibility modifier called protected.
mySub Subclass inaccessible Superclass accessible Access from the Subclass Methods • Public and protected elements of the superclass (objects) are visible to its subclasses (objects).
mySuper Superclass mySub Subclass Superclass Client test Access from the Outside • Only the public elements are accessible from the outside objects.
anInstance anotherInstance AClass AClass Access from Another Instance • All elements of an object are accessible from other instances of the same class.
Example Program Dong … out to reality … HouseOccupant.java, Human.java, Pet.java, UseHouseOccupant.java
Student student; student = new GraduateStudent(); student.computeGrade( ); Student student; student = new UndergraduateStudent(); student.computeGrade( ); 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 This will call the method of GraduateStudent This will call the method of UndergraduateStudent
Student roster[ ] = new Student[40]; roster[0] = new GraduateStudent( ); roster[1] = new UndergraduateStudent( ); roster[2] = new UndergraduateStudent( ); roster[3] = new GraduateStudent( ); 0 1 2 3 4 36 37 38 39 roster Under-graduate-Student Graduate-Student Graduate-Student Under-graduate-Student Creating the roster Array roster is an array of Student objects. Create instances of the subclasses of Student.
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. Processing the roster Array 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.
abstract class Student { . . . abstract public void computeGrade( ); . . . } Reserved word abstract in the class declaration. class GraduateStudent extends Student { . . . public void computeGrade( ) { //method body comes here } . . . } Sample Abstract Class Abstract method has no method body. 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