CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting...
-
Upload
lillian-booth -
Category
Documents
-
view
212 -
download
0
description
Transcript of CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting...
![Page 1: CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with methods classes.](https://reader036.fdocuments.us/reader036/viewer/2022083121/5a4d1b6f7f8b9ab0599b4ebf/html5/thumbnails/1.jpg)
CMSC 202
Polymorphism
![Page 2: CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with methods classes.](https://reader036.fdocuments.us/reader036/viewer/2022083121/5a4d1b6f7f8b9ab0599b4ebf/html5/thumbnails/2.jpg)
10/2010 2
Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with
methods classes
![Page 3: CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with methods classes.](https://reader036.fdocuments.us/reader036/viewer/2022083121/5a4d1b6f7f8b9ab0599b4ebf/html5/thumbnails/3.jpg)
10/2010 3
Introduction to Polymorphism Object-oriented programming mechanisms
Encapsulation - data and methods together Inheritance - extending a class for specialization Polymorphism
Polymorphism The ability to associate many meanings with one
method name. Accomplished through a mechanism known as late binding or dynamic binding.
Copyright © 2008 Pearson Addison-Wesley. All rights reserved
![Page 4: CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with methods classes.](https://reader036.fdocuments.us/reader036/viewer/2022083121/5a4d1b6f7f8b9ab0599b4ebf/html5/thumbnails/4.jpg)
10/2010 4
Animal Hierarchy
Animal
Dog Cat Pig
![Page 5: CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with methods classes.](https://reader036.fdocuments.us/reader036/viewer/2022083121/5a4d1b6f7f8b9ab0599b4ebf/html5/thumbnails/5.jpg)
10/2010 5
Animals That Speakpublic class Animal {
public void speak( int x ){ System.out.println(“ Animal “ + x );}
}public class Dog extends Animal{
public void speak (int x ){ System.out.println( “Dog “ + x ); }
}public class Cat extends Animal{
public void speak (int x ){ System.out.println( “Cat “ + x ); }
}public class Pig extends Animal{
public void speak (int x ){ System.out.println( “Pig “ + x ); }
}
![Page 6: CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with methods classes.](https://reader036.fdocuments.us/reader036/viewer/2022083121/5a4d1b6f7f8b9ab0599b4ebf/html5/thumbnails/6.jpg)
10/2010 6
The ZooDemo ClassIn the ZooDemo, we ask each Animal to say hello to
the audience.
public class ZooDemo{
// Overloaded type-specific sayHello method// for each kind of Animal
public static void sayHello( Dog d, int i ){ d.speak( i ); }
public static void sayHello( Cat c, int i ){ c.speak( i ); }
public static void sayHello( Pig p, int i){ p.speak( i ); }
(continued)
![Page 7: CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with methods classes.](https://reader036.fdocuments.us/reader036/viewer/2022083121/5a4d1b6f7f8b9ab0599b4ebf/html5/thumbnails/7.jpg)
10/2010 7
The ZooDemo Classpublic static void main( String[ ] args ){
Dog dusty = new Dog( );Cat fluffy = new Cat( );Pig sam = new Pig( );
sayHello( dusty, 7 );sayHello( fluffy, 17 );sayHello( sam, 27 );
}} // end Zoo Demo
//------- output -----Dog 7Cat 17Pig 27
![Page 8: CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with methods classes.](https://reader036.fdocuments.us/reader036/viewer/2022083121/5a4d1b6f7f8b9ab0599b4ebf/html5/thumbnails/8.jpg)
10/2010 8
Problems with ZooDemo? The ZooDemo class contains a type-specific
version of sayHello for each type of Animal.
What if we add more types of Animals?
Wouldn’t it be nice to write just one sayHello method that works for all animals?
![Page 9: CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with methods classes.](https://reader036.fdocuments.us/reader036/viewer/2022083121/5a4d1b6f7f8b9ab0599b4ebf/html5/thumbnails/9.jpg)
10/2010 9
New ZooDemopublic class ZooDemo{
// One sayHello method whose parameter // is the base class works for all Animals
public static void sayHello( Animal a, int x ){ a.speak( x ); }
public static void main( String[ ] args ){
Dog dusty = new Dog( );Cat fluffy = new Cat( );Pig sam = new Pig( );
sayHello( dusty, 7 );sayHello( fluffy, 17 );sayHello( sam, 27 );
}}
![Page 10: CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with methods classes.](https://reader036.fdocuments.us/reader036/viewer/2022083121/5a4d1b6f7f8b9ab0599b4ebf/html5/thumbnails/10.jpg)
10/2010 10
How Does New ZooDemo work? Associating the appropriate method definition
with the method invocation is known as binding.
Early binding occurs when the method definition is associated with its invocation when code is compiled. With early binding, the method invoked is
determined by the reference variable type.
How can the compiler know which Animal’s speak method to call in sayHello? It can’t!
![Page 11: CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with methods classes.](https://reader036.fdocuments.us/reader036/viewer/2022083121/5a4d1b6f7f8b9ab0599b4ebf/html5/thumbnails/11.jpg)
10/2010 11
Late Binding The solution is to use late (dynamic) binding. Late binding
The appropriate method definition is associated with its invocation at run-time.
The method invoked is determined by the type of object to which the variable refers, NOT by the type of the reference variable.
Java uses late binding for all methods except final, private (which are implicitly final), and static methods.
![Page 12: CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with methods classes.](https://reader036.fdocuments.us/reader036/viewer/2022083121/5a4d1b6f7f8b9ab0599b4ebf/html5/thumbnails/12.jpg)
10/2010 12
An Object Knows the Definitions of Its Methods
The type of a class variable determines which method names can be used with the variable. However, the object named by the variable determines
which definition with the same method name is used.
A special case of this rule: The type of a class parameter determines which method
names can be used with the parameter. The argument determines which definition of the method
name is used.
Copyright © 2008 Pearson Addison-Wesley. All rights reserved
![Page 13: CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with methods classes.](https://reader036.fdocuments.us/reader036/viewer/2022083121/5a4d1b6f7f8b9ab0599b4ebf/html5/thumbnails/13.jpg)
10/2010 13
Using Polymorphism
How do we take advantage of Polymorphism? Write code to talk to base class objects (e.g. use
base class references as method parameters).
Late binding will ensure that the appropriate method definition is used, even if a reference to a derived class is passed to the method.
![Page 14: CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with methods classes.](https://reader036.fdocuments.us/reader036/viewer/2022083121/5a4d1b6f7f8b9ab0599b4ebf/html5/thumbnails/14.jpg)
10/2010 14
More Animals
Animal
Dog Cat Pig Horse
Poodle Collie
![Page 15: CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with methods classes.](https://reader036.fdocuments.us/reader036/viewer/2022083121/5a4d1b6f7f8b9ab0599b4ebf/html5/thumbnails/15.jpg)
10/2010 15
Extensibility Suppose more Animals were added to the hierarchy as shown in the
previous diagram.
All of these new classes work correctly with the old, unchanged sayHello method of the ZooDemo because sayHello’s parameter is a base class reference.
In a well designed OOP program, most of your methods will follow the model of sayHello and communicate with a base class reference and let late binding and polymorphism determine which sayHello method to call.
Such a program is called extensible because you can add new functionality by deriving new classes from the base class without changing existing code.
![Page 16: CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with methods classes.](https://reader036.fdocuments.us/reader036/viewer/2022083121/5a4d1b6f7f8b9ab0599b4ebf/html5/thumbnails/16.jpg)
10/2010 16
The final Modifier A method marked final indicates that it cannot be
overridden with a new definition in a derived class. If final, the compiler can use early binding with the
method.
public final void someMethod() { . . . }
A class marked final indicates that it cannot be used as a base class from which to derive any other classes.
Copyright © 2008 Pearson Addison-Wesley. All rights reserved
![Page 17: CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with methods classes.](https://reader036.fdocuments.us/reader036/viewer/2022083121/5a4d1b6f7f8b9ab0599b4ebf/html5/thumbnails/17.jpg)
10/2010 17
If an appropriate toString method is defined for a class, then an object of that class can be output using
System.out.println( );
As in this code snippetAnimal max = new Animal( );System.out.println(max);
This works because of late binding.
Late Binding with toString
Copyright © 2008 Pearson Addison-Wesley. All rights reserved
![Page 18: CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with methods classes.](https://reader036.fdocuments.us/reader036/viewer/2022083121/5a4d1b6f7f8b9ab0599b4ebf/html5/thumbnails/18.jpg)
10/2010 18
Late Binding with toString One definition of the method println takes a single argument
of type Object:public void println(Object theObject){ System.out.println(theObject.toString());} In turn, It invokes the version of println that takes a String
argument.
Note that the println method was defined before the Animal class existed.
Because of late binding, the toString method from the Animal class is used, not the toString from the Object class.
Copyright © 2008 Pearson Addison-Wesley. All rights reserved
![Page 19: CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with methods classes.](https://reader036.fdocuments.us/reader036/viewer/2022083121/5a4d1b6f7f8b9ab0599b4ebf/html5/thumbnails/19.jpg)
10/2010 19
Upcasting and Downcasting Upcasting occurs when an object of a derived class is assigned
to a variable of a base class (or any ancestor class).
Animal animalVariable; // base classDog dogVariable = new Dog( ); // derived classanimalVariable = dogVariable; // upcasting
animalVariable.speak(42); // “Dog 42” is printed
Or we could do something equivalent, such as
Animal animal = new Dog( );
Because of late binding, speak uses the definition of speak given in the Dog class.
Copyright © 2008 Pearson Addison-Wesley. All rights reserved
![Page 20: CMSC 202 Polymorphism. 10/20102 Topics Binding (early and late) Upcasting and downcasting Extensibility The final modifier with methods classes.](https://reader036.fdocuments.us/reader036/viewer/2022083121/5a4d1b6f7f8b9ab0599b4ebf/html5/thumbnails/20.jpg)
10/2010 20
Upcasting and Downcasting Downcasting occurs when a type cast is performed from a base
class to a derived class (or from any ancestor class to any descendent class).
Downcasting must be done very carefully. In many cases it doesn't make sense, or is illegal:
dogVariable = //will produce (Dog)animalVariable; //run-time error
dogVariable = animalVariable //will produce //compiler error
There are times when downcasting is necessary; e.g., inside the equals method for a class:
Dog otherDog = (Dog)otherDog; //downcasting
Copyright © 2008 Pearson Addison-Wesley. All rights reserved