Object-Oriented Programming: Polymorphism
Object-Oriented Programming: Polymorphism
Programming:
Polymorphism
Chapter 10
What You Will Learn
What is polymorphism?
2
Problem with Subclasses
Given the class hierarchy below
Consider the existence of a draw function for
each subclass
Consider also an array of references to the
superclass (which can also point to various
objects of the subclasses)
How do you specify which draw statement to
be called when using the references
Shape class hierarchy Shape
4
Polymorphism
When a program invokes a method
through a superclass variable,
the correct subclass version of the method
is called,
based on the type of the reference stored
in the superclass variable
Thesame method name and signature
can cause different actions to occur,
depending on the type of object on which
the method is invoked
5
Polymorphism
Polymorphism enables programmers to
deal in generalities and
let the execution-time environment handle
the specifics.
Programmers can command objects to
behave in manners appropriate to
those objects,
without knowing the types of the objects
(as long as the objects belong to the same
inheritance hierarchy). 6
Polymorphism Promotes
Extensibility
Software that invokes polymorphic
behavior
independent of the object types to which
messages are sent.
New object types that can respond to
existing method calls can be
incorporated into a system without
requiring modification of the base system.
Only client code that instantiates new
objects must be modified to accommodate
new types.
7
Demonstrating Polymorphic
Behavior
A superclass reference can be aimed at
a subclass object
a subclass object is-a superclass object
the type of the actual referenced object,
not the type of the reference, determines
which method is called
A subclass reference can be aimed at a
superclass object only if the object is
downcasted
View example, Figure 10.1 8
Polymorphism
Promotes extensibility
New objects types can respond to
existing method calls
Can be incorporated into a system without
modifying base system
Only
client code that instantiates the
new objects must be modified
To accommodate new types
9
Abstract Classes and Methods
Abstract classes
Are superclasses (called abstract
superclasses)
Cannot be instantiated
Incomplete
subclasses fill in "missing pieces"
Concrete classes
Can be instantiated
Implement every method they declare
Provide specifics 10
Abstract Classes and Methods
Purpose of an abstract class
Declare common attributes
Declare common behaviors of classes in a
class hierarchy
Contains one or more abstract methods
Subclasses must override
Instancevariables, concrete methods
of abstract class
subject to normal rules of inheritance
11
Abstract Classes
Classes that are too general to
create real objects
Used only as abstract superclasses
for concrete subclasses and to
declare reference variables
Many inheritance hierarchies have
abstract superclasses occupying the
top few levels
12
Keyword abstract
14
Abstract Classes
Declares common attributes and
behaviors of the various classes in a
class hierarchy.
Typically contains one or more abstract
methods
Subclasses must override if the subclasses
are to be concrete.
Instance
variables and concrete
methods of an abstract class subject to
the normal rules of inheritance. 15
Beware! Compile Time Errors
17
Example Based on Employee
Abstract Class
Concrete
Classes
19
Note in Example Hierarchy
Dynamic binding
Also known as late binding
Calls to overridden methods are resolved
at execution time, based on the type of
object referenced
instanceof operator
Determines whether an object is an
instance of a certain type
20
How Do They Do That?
How does it work?
Access a derived object via base class
pointer
Invoke an abstract method
At run time the correct version of the
method is used
Design of the V-Table
Note description from C++
21
Note in Example Hierarchy
Downcasting
Convert a reference to a superclass to a
reference to a subclass
Allowed only if the object has an is-a
relationship with the subclass
getClass method
Inherited from Object
Returns an object of type Class
getName method of class Class
Returns the classs name 22
Superclass And Subclass
Assignment Rules
Assigning a superclass reference to
superclass variable straightforward
Subclass reference to subclass variable
straightforward
Subclass reference to superclass variable
safe
because of is-a relationship
Referring to subclass-only members through
superclass variables a compilation error
Superclass reference to a subclass variable a
compilation error
Downcasting can get around this error
23
final Methods and Classes
final methods
Cannot be overridden in a subclass
private and static methods implicitly
final
final methods are resolved at compile
time, this is known as static binding
Compilers can optimize by inlining the code
final classes
Cannot be extended by a subclass
All methods in a final class implicitly
final 24
Why Use Interfaces
Java has single inheritance, only
This means that a child class inherits
from only one parent class
Sometimes multiple inheritance would
be convenient
Interfaces give Java some of the
advantages of multiple inheritance
without incurring the disadvantages
25
Why Use Interfaces
Provide capability for unrelated classes
to implement a set of common
methods
Define and standardize ways people
and systems can interact
Interface specifies what operations
must be permitted
Does not specify how performed
26
What is an Interface?
27
What is an Interface?
A child class that extends a parent
class can also implement an interface
to gain some additional behavior
Implementing an interface is a
promise to include the specified
method(s)
A method in an interface cannot be
made private
28
When A Class Definition
Implements An Interface:
It must implement each method in the
interface
Each method must be public (even
though the interface might not say so)
Constants from the interface can be
used as if they had been defined in the
class (They should not be re-defined in
the class)
29
Declaring Constants with Interfaces
Interfaces can be used to declare
constants used in many class
declarations
These constants are implicitly public,
static and final
Using a static import declaration allows
clients to use these constants with just
their names
30
Implementation vs. Interface
Inheritance
Implementation Interface Inheritance
Inheritance
Functionality high in the Functionality lower in
hierarchy hierarchy
Each new subclass Superclass specifies one
inherits one or more or more abstract
methods declared in methods
superclass Must be declared for
Subclass uses each class in hierarchy
superclass declarations Overridden for
subclass-specific
implementations
31
Creating and Using Interfaces
Declaration begins with interface
keyword
Classes implement an interface (and its
methods)
Contains public abstract methods
Classes (that implement the interface)
must implement these methods
32
Creating and Using Interfaces
Consider the possibility of having a
class which manipulates mathematical
functions
You want to send a function as a
parameter
Note that C++ allows this directly
Java does not
Thistask can be accomplished with
interfaces
33
Creating and Using Interfaces
Declare interface Function
Declare class MyFunction which
implements Function
Noteother functions which are subclass
objects of MyFunction
Viewtest program which passes
Function subclass objects to function
manipulation methods
34
Case Study: A Payable Hierarchy
Payable interface
Contains method getPaymentAmount
Is implemented by the Invoice and
Employee classes
35
End of Chapter 10 Lecture
36
Following slides are from previous
edition. Links may not work.
37
Source Code for Shape Superclass
Hierarchy
Shape superclass, Figure 10.6
Note abstract method, getName
Point subclass, Figure 10.7
Note, extends Shape, override of getName
Circle subclass, Figure 10.8
Note extends Point, override of getArea,
getName, and toString
Cylinder subclass, Figure 10.9
Note extends Circle, override of getArea,
getName, and toString 38
Source Code for Shape Superclass
Hierarchy
Driverprogram to demonstrate,
Figure 10.10
Note array of superclass references
Outputof
program
39
Polymorphic Payroll System
Employee
BasePlusCommissionEmployee
40
Polymorphic Payroll System
Abstractsuperclass, Employee,
Figure 10.12
Note abstract class specification, abstract
earnings method
Abstractsubclass, SalariedEmployee,
Figure 10.13
Note extends Employee, override of
earnings method
Lookat other subclasses in text, pg
461
Note here also the override of earnings41
Polymorphic Payroll System
View test program, Figure 10.17
Note array of superclass references which
are pointed at various subclass objects
Note generic calls of toString method
Note use of instantceof operator
Consider use of downcasting (line 37)
Note use of getClass().getName()
method
Gives access to the name of the class
42
Polymorphic Payroll System
Output of the
payroll testing
program
Note results of
getClass().getName()
calls
43
Creating and Using Interfaces
Viewimplementation of the interface
Shape, Figure 10.19
Note the following:
Line 4
public class Point extends Object
implements Shape {
Declaration of additional methods
Declaration of abstract methods getArea,
getVolume, and getName
44
Nested Classes
Top-level classes
Not declared inside a class or a method
Nested classes
Declared inside other classes
Inner classes
Non-static nested classes
Demonstrated in Figure 10.22
Run the program
Audio
45
Mentioned In The Audio
Object
Container
Background Frame
Content JFrame
Glass
46
Mentioned In The Audio
Three things required when
performing events
1. Implement the interface
2. Register the event handlers
3. Specifically implement the
actionPerformed methods
47
Nested Classes
An inner class is allowed to directly
access its inner class's variables and
methods
When this used in an inner class
Refers to current inner-class object
To access outer-class using this
Precede this with outer-class name
48
Nested Classes
Anonymous inner class
Declared inside a method of a class
Has no name
Inner class declared inside a method
Can access outer class's members
Limited to local variables of method in
which declared
Noteuse of anonymous inner class,
Figure 10.23
49
Notes on Nested Classes
Compiling class that contains nested class
Results in separate .class file
OuterClassName$InnerClassName.class
50
Notes on Nested Classes
Access outer classs this reference
OuterClassName.this
Outer class is responsible for creating
inner class objects
OuterClassName.InnerClassName innerRef =
ref.new InnerClassName();
circle = point;
54
Subclass Method Calls via
Superclass-Type Variables
Consideraiming a subclass
reference at a superclass object
If you use this to access a subclass-
only method it is illegal
Note Figure 10.3
Lines 22 - 23
55
Summary of Legal Assignments between
Super- and Subclass Variables
59
Inheriting Interface and
Implementation
Make abstract superclass Shape
Abstract method (must be implemented)
getName, print
Default implementation does not make sense
Methods may be overridden
getArea, getVolume
Default implementations return 0.0
If not overridden, uses superclass default
implementation
Subclasses Point, Circle, Cylinder
60
Polymorphic Interface For The
Shape Hierarchy Class
getArea getVolume getName toString
Point
Circle
center=[x,y];
2r2 +2rh r2h "Cylinder" radius=r;
Cylinder height=h
Cylinder
61
Creating and Using Interfaces
Allthe same "is-a" relationships apply
when an interface inheritance is used
Objects of any class that extend the
interface are also objects of the
interface type
Circle extends Point, thus it is-a Shape
Multiple interfaces are possible
Comma-separated list used in declaration
62