Polymorphism 2nd Lecture

Slides:



Advertisements
Similar presentations
Slides prepared by Rose Williams, Binghamton University ICS201 Lecture 4 : Polymorphism King Fahd University of Petroleum & Minerals College of Computer.
Advertisements

Programming With Java ICS 201 University Of Ha’il1 Chapter 8 Abstract Class.
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,
Unit 021 Abstract Classes What is an Abstract Class? Properties of an Abstract Class Discovering Abstract Classes.
Slides prepared by Rose Williams, Binghamton University Chapter 7 Inheritance.
CS102--Object Oriented Programming Lecture 7: – Inheritance Copyright © 2008 Xiaoyan Li.
© 2006 Pearson Addison-Wesley. All rights reserved8-1 The final Modifier A method marked final indicates that it cannot be overridden with a new definition.
Chapter 8 Polymorphism and Abstract Classes Slides prepared by Rose Williams, Binghamton University Copyright © 2008 Pearson Addison-Wesley. All rights.
CS102--Object Oriented Programming Lecture 9: – Polymorphism Copyright © 2008 Xiaoyan Li.
Chapter 7 Inheritance Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
Slides prepared by Rose Williams, Binghamton University Chapter 8 Polymorphism Part I.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 1 Chapter 13 Polymorphism is-a relationships Interfaces.
Slides prepared by Rose Williams, Binghamton University Chapter 7 Inheritance.
CS102--Object Oriented Programming Lecture 10: – Abstract Classes Copyright © 2008 Xiaoyan Li.
CMSC 202 Interfaces. 11/20102 Classes and Methods When a class defines its methods as public, it describes how the class user interacts with the method.
Comp 249 Programming Methodology Chapter 8 - Polymorphism Dr. Aiman Hanna Department of Computer Science & Software Engineering Concordia University, Montreal,
CMSC 202 Inheritance II. Version 10/102 Inherited Constructors? An Employee constructor cannot be used to create HourlyEmployee objects. Why not? We must.
Programming With Java ICS201 University Of Ha’il1 Chapter 8 Polymorphism and Abstract Classes.
Chapter 8 Polymorphism and Abstract Classes Slides prepared by Rose Williams, Binghamton University Copyright © 2008 Pearson Addison-Wesley. All rights.
CMSC 202 Generics. Nov Generalized Code One goal of OOP is to provide the ability to write reusable, generalized code. Polymorphic code using.
CMSC 202 Inheritance I Class Reuse with Inheritance.
Programming With Java ICS201 University Of Ha’il1 Chapter 7 Inheritance.
CMSC 202 Inheritance II. Version 10/092 Inherited Constructors? An Employee constructor cannot be used to create HourlyEmployee objects. Why not? We must.
CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with  methods  classes.
Chapter 13 Interfaces and Inner Classes Slides prepared by Rose Williams, Binghamton University Copyright © 2008 Pearson Addison-Wesley. All rights reserved.
CMSC 202 Polymorphism 2 nd Lecture. Aug 6, Topics Constructors and polymorphism The clone method Abstract methods Abstract classes.
Java Programming: Guided Learning with Early Objects Chapter 9 Inheritance and Polymorphism.
A Concrete Presentation on Abstract Classes and Methods, Interfaces, and Polymorphism CSC 202.
Polymorphism and Abstract Classes
Polymorphism November 27, 2006 ComS 207: Programming I (in Java)
Polymorphism 2nd Lecture
Lecture 12 Inheritance.
COMP 2710 Software Construction Inheritance
Polymorphism 2nd Lecture
Comp 249 Programming Methodology
Classes and Objects 2nd Lecture
Inheritance 2nd Lecture
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
Classes and Objects Encapsulation
Polymorphism 2nd Lecture
Comp 249 Programming Methodology
Inheritance I Class Reuse with Inheritance
CMSC 202 Interfaces.
CMSC 202 Polymorphism.
Inheritance 2nd Lecture
CMSC 202 Inheritance.
Inheritance.
Class Reuse with Inheritance
Java Classes and Objects 3rd Lecture
Computer Programming with JAVA
Inheritance 2nd Lecture
Abstract methods and classes
مظفر بگ محمدی دانشگاه ایلام
مظفر بگ محمدی دانشگاه ایلام
CMSC 202 Interfaces.
Java Classes and Objects 4th Lecture
CMSC 202 Generics.
Chapter 9 Carrano Chapter 10 Small Java
Classes, Objects and Methods
Chapter 11 Inheritance and Polymorphism Part 1
CMSC 202 Inheritance II.
CMSC 202 Exceptions.
CMSC 202 Interfaces.
Classes and Objects Object Creation
Chapter 8 Abstract Classes.
Chapter 7 Inheritance.
CMSC 202 Constructors Version 9/10.
Presentation transcript:

Polymorphism 2nd Lecture CMSC 202 Polymorphism 2nd Lecture

Constructors and Polymorphism Because constructors are special, it’s important to understand how constructors work in the context of inheritance and polymorphism. A constructor for the base class is automatically called during construction of a derived class. This call propagates up the inheritance hierarchy until the constructor for every base class is called. Why does this make sense? The constructor’s job is to see that the object is completely built The derived class cannot have access to the base class private instance variables The base class constructor must be called to initialize its instance variables Therefore all base class constructors must be called to fully initialize the entire derived class object Aug 6, 2007

More Dogs public class Animal { public Animal( ) {System.out.println(“Animal”); } } public class Dog extends Animal public Dog( ) {System.out.println(“Dog”); } public class Poodle extends Dog public Poodle( ) {System.out.println(“Poodle”);} public class Collie extends Dog { public Collie( ) {Sytem.out.println( “Collie”);} public class Cage { public Cage( ) { System.out.println(“Cage”);} } public class Zoo extends Cage { public Zoo( ) { System.out.println(“Zoo”); } Aug 6, 2007

DogKennel Cage Zoo Animal Dog Poodle Collie DogKennel public class DogKennel extends Zoo { private Poodle harry = new Poodle( ); private Collie lassie = new Collie( ); public DogKennel( ) { System.out.println( “DogKennel”); } public static void main (String[ ] args) { DogKennel kennel = new DogKennel( ); } } //--- Output --- Cage Zoo Animal Dog Poodle Collie DogKennel Aug 6, 2007

Order of Construction Noting the output when main simply constructs a DogKennel, we see the order in which constructors are called Note that base class constructors are called implicitly if there is no explicit call super( ) ; Base class constructors, recursively from the top of the hierarchy Instance variables in order of declaration The body of the derived class constructor Aug 6, 2007

Derived Class Copy Constructors Derived class copy constructors must make an explicit call to the base class copy constructor public Dog( Dog anotherDog ) { // super takes care of the base class “stuff” super( anotherDog ); // polymorphism // code specific to Dogs follows } Aug 6, 2007

A First Look at the clone Method Every object inherits a method named clone from the class Object The method clone has no parameters Its purpose is to return a deep copy of the calling object However, the inherited version of the method was not designed to be used as is Instead, each class is expected to override it with a more appropriate version Aug 6, 2007 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 7

A First Look at the clone Method The heading for the clone method defined in the Object class is: protected Object clone() The heading for a clone method that overrides the clone method in the Object class can differ somewhat from the heading above A change to a more permissive access, such as from protected to public, is always allowed when overriding a method definition Changing the return type from Object to the type of the class being cloned is allowed because every class is a descendent class of the class Object. This is an example of a covariant return type Aug 6, 2007 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 8

A First Look at the clone Method If a class has a copy constructor, the clone method for that class can use the copy constructor to create the copy returned by the clone method public Animal clone() { // call Animal’s copy constructor return new Animal(this); } and another example: public Dog clone() // Dog’s copy constructor return new Dog(this); Aug 6, 2007 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 9

Pitfall: Limitations of Copy Constructors Although the copy constructor and clone method for a class appear to do the same thing, there are cases where only a clone will work For example, given a method badcopy in the class Zoo that copies an array of animals If this array of animals contains objects from a derived class of Animal (i.e., Dog, Cat), then the copy will be a plain animal, not a true copy (why??) b[i] = new Animal(a[i]); //plain Animal object Aug 6, 2007 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 10

Pitfall: Limitations of Copy Constructors However, if the clone method is used instead of the copy constructor, then (because of polymorphism) a true copy is made, even from objects of a derived class (e.g., Dog, Cat, Pig): b[i] = (a[i].clone()); // Dog, Cat, Pig object The reason this works is because the method clone has the same name in all classes, and polymorphism works with method names The copy constructors named Animal and Dog have different names, and polymorphism doesn't work with methods of different names Aug 6, 2007 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 11

Introduction to Abstract Classes In Chapter 7, the Employee base class and two of its derived classes, HourlyEmployee and SalariedEmployee were defined. A portion of the those classes are shown on the following slide Aug 6, 2007 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 12

Employee Classes public class Employee { private String name; private Date hireDate; // constructors, accessors, mutators, equals, toString } public class HourlyEmployee extends Employee private double wageRate; private double hours; //for the month public double getPay( ) {return wageRate * hours;} public class SalariedEmployee extends Employee private double salary; //annual public double getPay() { return salary / 12; } Aug 6, 2007

samePay Suppose that we decide that it will often be necessary to determine if two Employees have the same pay, so we decide to implement a method named samePay. This method should be able to compare the pays for any kinds of Employees. No problem with polymorphism. We’ll just define samePay in the Employee class and let late binding an polymorphism do their magic. public boolean samePay(Employee other) { return(this.getPay() == other.getPay()); } Aug 6, 2007

Problem with samePay The method samePay calls getPay. While getPay is defined for SalariedEmployees and HourlyEmployees, there is no meaningful implementation of getPay for a generic Employee. We can’t implement getPay without knowing the type of Employee. The solution is to require that classes derived from Employee (who know what type they are) implement a suitable getPay method which can then be used from samePay. Java provides this capability through the use of abstract methods. Aug 6, 2007

Introduction to Abstract Classes In order to postpone the definition of a method, Java allows an abstract method to be declared An abstract method has a heading, but no method body The body of the method is defined in the derived classes The class that contains an abstract method is called an abstract class Aug 6, 2007 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 16

Copyright © 2008 Pearson Addison-Wesley. Abstract Method An abstract method is like a placeholder for a method that will be fully defined in a descendent class It has a complete method heading, to which the modifier abstract has been added It cannot be private It has no method body, and ends with a semicolon in place of its body public abstract double getPay(); public abstract void doIt(int count); Aug 6, 2007 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 17

Copyright © 2008 Pearson Addison-Wesley. Abstract Class A class that has at least one abstract method is called an abstract class An abstract class must have the modifier abstract included in its class heading: public abstract class Employee { private instanceVariables; . . . public abstract double getPay(); } Aug 6, 2007 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 18

Copyright © 2008 Pearson Addison-Wesley. Abstract Class An abstract class can have any number of abstract and/or fully defined methods If a derived class of an abstract class adds to or does not define all of the abstract methods, then it is abstract also, and must add abstract to its modifier A class that has no abstract methods is called a concrete class Aug 6, 2007 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 19

Abstract Employee Class public abstract class Employee { private String name; private Date hireDate; public abstract double getPay( ); // constructors, accessors, mutators, equals, toString public boolean samePay(Employee other) return(this.getPay() == other.getPay()); } Aug 6, 2007

Pitfall: You Cannot Create Instances of an Abstract Class An abstract class can only be used to derive more specialized classes While it may be useful to discuss employees in general, in reality an employee must be a salaried worker or an hourly worker An abstract class constructor cannot be used to create an object of the abstract class However, a derived class constructor will include an invocation of the abstract class constructor in the form of super Aug 6, 2007 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 21

An Abstract Class Is a Type Although an object of an abstract class cannot be created, it is perfectly fine to have a parameter of an abstract class type This makes it possible to plug in an object of any of its descendent classes It is also fine to use a variable of an abstract class type, as long is it names objects of its concrete descendent classes only Aug 6, 2007 Copyright © 2008 Pearson Addison-Wesley. All rights reserved 22