Class Reuse with Inheritance

Slides:



Advertisements
Similar presentations
Copyright © 2002 Pearson Education, Inc. Slide 1.
Advertisements

Chapter 14 Inheritance. Copyright © 2006 Pearson Addison-Wesley. All rights reserved Learning Objectives Inheritance Basics Derived classes, with.
1 l Inheritance Basics l Programming with Inheritance l Dynamic Binding and Polymorphism Inheritance.
CMSC 202 Inheritance. Aug 6, Object Relationships An object can have another object as one of instance variables. The Person class had two Date.
Comp 249 Programming Methodology Chapter 7 - Inheritance – Part A Dr. Aiman Hanna Department of Computer Science & Software Engineering Concordia University,
Inheritance Inheritance Reserved word protected Reserved word super
Chapter 7 Inheritance Slides prepared by Rose Williams, Binghamton University Copyright © 2008 Pearson Addison-Wesley. All rights reserved.
Inheritance. Extending Classes It’s possible to create a class by using another as a starting point  i.e. Start with the original class then add methods,
1 Inheritance Reserved word protected Reserved word super Overriding methods Class Hierarchies Reading for this lecture: L&L 8.1 – 8.5.
Slides prepared by Rose Williams, Binghamton University Chapter 7 Inheritance.
Slides prepared by Rose Williams, Binghamton University Chapter 7 Inheritance.
CS102--Object Oriented Programming Lecture 7: – Inheritance Copyright © 2008 Xiaoyan Li.
Slides prepared by Rose Williams, Binghamton University Chapter 7 Inheritance.
CS102--Object Oriented Programming Lecture 8: – More about Inheritance When to use inheritance Relationship between classes Rules to follow Copyright ©
1 Chapter 7 l Inheritance Basics l Programming with Inheritance l Dynamic Binding and Polymorphism Inheritance.
Chapter 7 Inheritance Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
Slides prepared by Rose Williams, Binghamton University Chapter 7 Inheritance.
Chapter 7 Inheritance Slides prepared by Rose Williams, Binghamton University Copyright © 2008 Pearson Addison-Wesley. All rights reserved.
CMSC 202 Inheritance II. Version 10/102 Inherited Constructors? An Employee constructor cannot be used to create HourlyEmployee objects. Why not? We must.
JAVA: An Introduction to Problem Solving & Programming, 5 th Ed. By Walter Savitch and Frank Carrano. ISBN © 2008 Pearson Education, Inc., Upper.
CMSC 202 Inheritance I Class Reuse with Inheritance.
Slides prepared by Rose Williams, Binghamton University Chapter 7 Inheritance.
Copyright © 2006 Pearson Addison-Wesley. All rights reserved Learning Objectives  Inheritance  Virtual Function.
Programming With Java ICS201 University Of Ha’il1 Chapter 7 Inheritance.
1 COSC2007 Data Structures II Chapter 9 Class Relationships.
CMSC 202 Inheritance II. Version 10/092 Inherited Constructors? An Employee constructor cannot be used to create HourlyEmployee objects. Why not? We must.
Creating Classes from Other Classes Appendix D © 2015 Pearson Education, Inc., Hoboken, NJ. All rights reserved.
1 Inheritance Reserved word protected Reserved word super Overriding methods Class Hierarchies Reading for this lecture: L&L 9.1 – 9.4.
CMSC 202 Polymorphism 2 nd Lecture. Aug 6, Topics Constructors and polymorphism The clone method Abstract methods Abstract classes.
JAVA: An Introduction to Problem Solving & Programming, 5 th Ed. By Walter Savitch and Frank Carrano. ISBN © 2008 Pearson Education, Inc., Upper.
Inheritance Chapter 7 Inheritance Basics Programming with Inheritance
Chapter 12 OOP: Polymorphism, Interfaces and Operator Overloading
Polymorphism 2nd Lecture
Lecture 12 Inheritance.
Inheritance and Polymorphism
COMP 2710 Software Construction Inheritance
Polymorphism 2nd Lecture
Polymorphism 2nd Lecture
Road Map Inheritance Class hierarchy Overriding methods Constructors
Inheritance Chapter 7 Inheritance Basics Programming with Inheritance
Inheritance 2nd Lecture
ارث بری 2 استفاده ی مجدد از کلاس توسط وراثت
Chapter 7 Inheritance Slides prepared by Rose Williams, Binghamton University Kenrick Mock, University of Alaska Anchorage.
Chapter 14 Inheritance Copyright © 2008 Pearson Addison-Wesley. All rights reserved.
Inheritance Basics Programming with Inheritance
Polymorphism 2nd Lecture
Comp 249 Programming Methodology
Inheritance I Class Reuse with Inheritance
ارث بری 2 استفاده ی مجدد از کلاس توسط وراثت
OBJECT ORIENTED PROGRAMMING II LECTURE 8 GEORGE KOUTSOGIANNAKIS
Chapter 9 Object-Oriented Programming: Inheritance
Learning Objectives Inheritance Virtual Function.
Inheritance, Polymorphism, and Interfaces. Oh My
Advanced Java Topics Chapter 9
Comp 249 Programming Methodology
Inheritance 2nd Lecture
CMSC 202 Inheritance.
Inheritance.
Computer Programming with JAVA
Inheritance 2nd Lecture
Overriding Methods & Class Hierarchies
Inheritance Chapter 7 Inheritance Basics Programming with Inheritance
Chapter 8 Inheritance Part 2.
Chapter 11 Inheritance and Polymorphism Part 1
CMSC 202 Inheritance II.
Classes and Objects Object Creation
Chapter 8 Abstract Classes.
Chapter 7 Inheritance.
Programming in C# CHAPTER 5 & 6
CMSC 202 Constructors Version 9/10.
Presentation transcript:

Class Reuse with Inheritance CMSC 202 Class Reuse with Inheritance

Class Reuse We have seen how classes (and their code) can be reused with composition. An object has another object as one (or more) of its instance variables. Composition models the “has a” relationship. A Person has a String (name) A Car has an Engine A Book has an array of Pages March 2008

Object Relationships An object can be a specialized version of another object. A Car is a Vehicle A Triangle is a Shape A Doctor is a Person A Student is a Person This kind of relationship is known as the “is a type of” relationship. In OOP, this relationship is modeled with the programming technique known as inheritance. Inheritance creates new classes by adding code to an existing class. The existing class is reused without modification. March 2008

Introduction to Inheritance Inheritance is one of the main techniques of OOP. Using inheritance a very general class is first defined, then more specialized versions of the class are defined by adding instance variables and/or adding methods. The specialized classes are said to inherit the methods and instance variables of the general class. March 2008 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 4

Copyright © 2008 Pearson Addison-Wesley. Derived Classes There is often a natural hierarchy when designing certain classes. Example: In a record-keeping program for the employees of a company, there are hourly employees and salaried employees. Hourly employees can be divided into full time and part time workers. Salaried employees can be divided into those on the technical staff and those on the executive staff. March 2008 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 5

Copyright © 2008 Pearson Addison-Wesley. Derived Classes All employees have certain characteristics in common: a name and a hire date the methods for setting and changing the names and hire dates Some employees have specialized characteristics: Pay hourly employees are paid an hourly wage salaried employees are paid a fixed wage Calculating wages for these two different groups would be different. March 2008 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 6

Inheritance and OOP Inheritance is an abstraction for sharing similarities among classes (name and hireDate), and preserving their differences (how they get paid). Inheritance allows us to group classes into families of related types (Employees), allowing for the sharing of common operations and data. March 2008

Copyright © 2008 Pearson Addison-Wesley. General Classes A class called Employee can be defined that includes all employees. This class can then be used to define classes for hourly employees and salaried employees. The HourlyEmployee class can be used to define a PartTimeHourlyEmployee class, and so forth. March 2008 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 8

Copyright © 2008 Pearson Addison-Wesley. A Class Hierarchy March 2008 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 9

The Employee Class /** Class Invariant: All objects have a name string and hire date. A name string of "No name" indicates no real name specified yet. A hire date of Jan 1, 1000 indicates no real hire date specified yet. */ public class Employee { private String name; private Date hireDate; // no-argument constructor public Employee( ) name = "No name"; hireDate = new Date("Jan", 1, 1000); //Just a placeholder. } // alternate constructor public Employee(String theName, Date theDate) { /* code here */ } // copy constructor public Employee(Employee originalObject) { /* code here */ } (continued) March 2008

Employee Class // some accessors and mutators public String getName( ) { /* code here */ } public Date getHireDate( ) { /* code here */ } public void setName(String newName) { /* code here */ } public void setHireDate(Date newDate) { /* code here */ } // toString and equals public String toString( ) { /* code here */ } public boolean equals(Employee otherEmployee) { /* code here */ } } // end of Employee Class March 2008

Copyright © 2008 Pearson Addison-Wesley. Derived Classes Since an hourly employee “is an” employee, it is defined as a derived class of the class Employee. A derived class is defined by adding instance variables and/or methods to an existing class. The class that the derived class is built upon is called the base class. The phrase extends BaseClass must be added to the derived class definition: public class HourlyEmployee extends Employee March 2008 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 12

HourlyEmployee Class /** Class Invariant: All objects have a name string, hire date, nonnegative wage rate, and nonnegative number of hours worked. */ public class HourlyEmployee extends Employee { // instance variables unique to HourlyEmployee private double wageRate; private double hours; //for the month // no-argument Constructor public HourlyEmployee( ) { /* code here */} // alternative constructor public HourlyEmployee(String theName, Date theDate, double theWageRate, double theHours) { /* code here */} // copy constructor public HourlyEmployee(HourlyEmployee originalHE) { /* code here */} (continued) March 2008

HourlyEmployee Class // accessors and mutator specific to HourlyEmployee public double getRate( ) { /* code here */ } public double getHours( ) { /* code here */ } public void setHours(double hoursWorked) { /* code here */ } public void setRate(double newWageRate) { /* code here */ } // toString and equals specific for HourlyEmployee public String toString( ) { /* code here */ } public boolean equals(HourlyEmployee otherHE) { /* code here */ } } // end of HourlyEmployee Class March 2008

Copyright © 2008 Pearson Addison-Wesley. Derived Classes A derived class inherits the instance variables and methods of the base class that it extends. Class Employee defines the instance variables name and hireDate in its class definition. Class HourlyEmployee also has these instance variables, but they are not specified in its class definition. Class HourlyEmployee has additional instance variables wageRate and hours that are specified in its class definition. March 2008 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 15

Copyright © 2008 Pearson Addison-Wesley. Derived Classes The HourlyEmployee class also inherits all of the Employee class methods. The HourlyEmployee class inherits the methods getName, getHireDate, setName, and setHireDate. Any object of the HourlyEmployee class can invoke any of these methods. March 2008 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 16

Derived Class (Subclass) A derived class is also called a subclass. The class derived from is called a base class or superclass. The derived class inherits all of the public methods, public and private instance variables, and public and private static variables from the base class. The derived class can add more instance variables, static variables, and/or methods. March 2008 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 17

Copyright © 2008 Pearson Addison-Wesley. Inherited Members A derived class automatically has all of the instance variables, static variables, and public methods of the base class Definitions for the inherited variables and methods do not appear in the derived class. The code is reused without having to explicitly copy it, unless the creator of the derived class redefines one or more of the base class methods. March 2008 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 18

Inherited Method Example public class Employee { .... public double calcRaise( ) { /* code here */ } } public class HourlyEmployee extends Employee // no calcRaise method If joe is an HourlyEmployee object, then double raise = joe.calcRaise( ); invokes the inherited calcRaise method in the Employee class. March 2008

Using HourlyEmployee public class HourlyEmployeeExample { } public static void main(String[] args) HourlyEmployee joe = new HourlyEmployee("Joe Worker", new Date(1, 1, 2004), 50.50, 160); // getName is defined in Employee System.out.println("joe's name is " + joe.getName( )); // setName is defined in Employee System.out.println("Changing joe's name to Josephine."); joe.setName("Josephine"); // setRate is specific for HourlyEmployee System.out.println(“Giving Josephine a raise”); joe.setRate( 65.00 ); }

Overriding a Method Definition A derived class can change or override an inherited method. In order to override an inherited method, a new method definition is placed in the derived class definition. March 2008 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 21

Overriding Example Suppose the Employee class defined the method calcRaise, which calculates the amount of an Employee’s raise based on years of service. If the implementer of HourlyEmployee used different criteria to calculate a raise, he could implement a new version of calcRaise in the HourlyEmployee class. (continued) March 2008

Overriding Example double raise = joe.calcRaise( ); public class Employee { .... public double calcRaise( ) { /* code here */ } } public class HourlyEmployee extends Employee . . . . // overriding calcRaise Now, if joe is an HourlyEmployee object, then double raise = joe.calcRaise( ); invokes the overridden calcRaise method in the HourlyEmployee class. To override a method in the derived class, the overriding method must have the same method signature as the base class method. March 2008

Changing the Return Type of an Overridden Method Ordinarily, the type returned may not be changed when overriding a method. However, if the returned type is a class type, then it may be changed to that of any descendent classes of the returned type. This is known as a covariant return type Covariant return types are new in Java 5.0. March 2008 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 24

Copyright © 2008 Pearson Addison-Wesley. Covariant Return Type Given the following base class, public class BaseClass { . . . public Employee getSomeone(int someKey) . . . the following is allowed in Java 5.0: public class DerivedClass extends BaseClass public HourlyEmployee getSomeone(int someKey) March 2008 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 25

Overriding Versus Overloading Do not confuse overriding a method in a derived class with overloading a method name. When a method in a derived class has the same signature as the method in the base class, that is overriding. When a method in a derived class or the same class has a different signature from the method in the base class or the same class, that is overloading. Note that when the derived class overrides or overloads the original method, it still inherits the original method from the base class as well (we’ll see this later). March 2008 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 26

Copyright © 2008 Pearson Addison-Wesley. The final Modifier If the modifier final is placed before the definition of a method, then that method may not be overridden in a derived class. It the modifier final is placed before the definition of a class, then that class may not be used as a base class to derive other classes. March 2008 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 27

Pitfall: Use of Private Instance Variables from a Base Class An instance variable that is private in a base class is not accessible by name in a method definition of a derived class. An object of the HourlyEmployee class cannot access the private instance variable hireDate by name, even though it is inherited from the Employee base class. Instead, a private instance variable of the base class can only be accessed by the public accessor and mutator methods defined in that class. An object of the HourlyEmployee class can use the getHireDate or setHireDate methods to access hireDate. March 2008 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 28

Copyright © 2008 Pearson Addison-Wesley. Encapsulation and Inheritance Pitfall: Use of Private Instance Variables from a Base Class If private instance variables of a class were accessible in method definitions of a derived class, … then anytime someone wanted to access a private instance variable, they would only need to create a derived class, and access the variables in a method of that class. This would allow private instance variables to be changed by mistake or in inappropriate ways. March 2008 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 29

Pitfall: Private Methods Are Effectively Not Inherited The private methods of the base class are like private variables in terms of not being directly available. A private method is completely unavailable, unless invoked indirectly. This is possible only if an object of a derived class invokes a public method of the base class that happens to invoke the private method. This should not be a problem because private methods should be used only as helper methods. If a method is not just a helper method, then it should be public. March 2008 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 30