25
Polymorphism Polymorphism Instructor: Wenjia Li Instructor: Wenjia Li 1 06/28/22

CSCI1302_Wenjia_Week4

Embed Size (px)

DESCRIPTION

lecture

Citation preview

Page 1: CSCI1302_Wenjia_Week4

PolymorphismPolymorphism

Instructor: Wenjia LiInstructor: Wenjia Li

104/21/23

Page 2: CSCI1302_Wenjia_Week4

Topics Topics

• Binding (early and late) • Upcasting and downcasting • Extensibility • The final modifier with – methods – classes

• Constructors and polymorphism • The clone method

04/21/23 2

Page 3: CSCI1302_Wenjia_Week4

Introduction to Polymorphism 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.

04/21/23 3

Page 4: CSCI1302_Wenjia_Week4

Vehicle Hierarchy Revisited Vehicle Hierarchy Revisited

04/21/23 4

Page 5: CSCI1302_Wenjia_Week4

Identifying Classes of Vehicles Identifying Classes of Vehicles

• We have implemented the identify() method defined in the base class and overidden in the derived classes. Each is a more specific definition of the base class' method.

04/21/23 5

Page 6: CSCI1302_Wenjia_Week4

The The VehicleDemoVehicleDemo Classes Classes • In the VehicleDemo, we ask each Vehicle to identify itself.

– This is NOT a good way to do it in OOP …

04/21/23 6

Page 7: CSCI1302_Wenjia_Week4

AnyAny Problem with VehicleDemo? Problem with VehicleDemo?

• The VehicleDemo class contains a type-specific version of identifyYourself for each type of Vehicle.

• What if we add more types of Vehicles? – 100 such methods for 100 types of vehicles?

• Wouldn’t it be nice to write just ONE identifyYourself method that works for all Vehicles?

04/21/23 7

Page 8: CSCI1302_Wenjia_Week4

The The NewVehicleDemoNewVehicleDemo Class Class

04/21/23 8

• What is the major difference here?– Let Java decide which specific identify it should choose.

Page 9: CSCI1302_Wenjia_Week4

How Does NewVehicleDemo work? How Does NewVehicleDemo 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 Vehicle's identify method to call in identifyYourself? – It can’t!

04/21/23 9

Page 10: CSCI1302_Wenjia_Week4

Late Binding 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.

04/21/23 10

Page 11: CSCI1302_Wenjia_Week4

Using Polymorphism 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.

04/21/23 11

Page 12: CSCI1302_Wenjia_Week4

More VehiclesMore Vehicles

04/21/23 12

Page 13: CSCI1302_Wenjia_Week4

Extensibility Extensibility • Suppose more Vehicles were added to the hierarchy as shown

in the previous diagram. • All of these new classes work correctly with the old,

unchanged identify() method of the NewVehicleDemo class because identifyYourself()’s parameter is a base class reference type(Vehicle).

• In a well designed OOP program, most of your methods will follow the model of identifyYourself() and communicate with a base class reference and let late binding and polymorphism determine which class' identify() 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.

04/21/23 13

Page 14: CSCI1302_Wenjia_Week4

The The finalfinal Modifier 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.

• A class marked final indicates that it cannot be used as a base class from which to derive any other classes.

04/21/23 14

Page 15: CSCI1302_Wenjia_Week4

Late Binding with toString • Because all classes created extend from Object,

our classes inherit the toString method and can be printed using

as in the following snippet

• This works because of late binding

04/21/23 15

Page 16: CSCI1302_Wenjia_Week4

Late Binding with Late Binding with toStringtoString (Cont.) (Cont.)• One definition of the method println takes a

single argument of type Object:

– In turn, It invokes the version of println that takes a String argument.

• Note that the println method was defined before the Vehicle class existed. – Because of late binding, the toString method from the Vehicle class is used, not the toString from the Object class.

04/21/23 16

Page 17: CSCI1302_Wenjia_Week4

Upcasting and Downcasting 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).

or we could do something equivalent, such as

• Because of late binding, identify() uses the definition of identify() given in the Automobile class.

04/21/23 17

Page 18: CSCI1302_Wenjia_Week4

Upcasting and Downcasting (Cont.)Upcasting and Downcasting (Cont.)

• 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:

• There are times when downcasting is necessary; e.g., inside the equals method for a class. – In that case, we need to make sure a Vehicle is an Automobile – How?

04/21/23 18

Page 19: CSCI1302_Wenjia_Week4

Constructors and Polymorphism Constructors 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.

04/21/23 19

Page 20: CSCI1302_Wenjia_Week4

More Vehicles More Vehicles

• In each constructor we are making explicit calls to base class constructors. – Which constructor is executed first?

04/21/23 20

Page 21: CSCI1302_Wenjia_Week4

Vehicle Station Vehicle Station

04/21/23 21

Page 22: CSCI1302_Wenjia_Week4

A A FirstFirst Look at the Look at the cloneclone Method 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. – Each class is expected to override it with a more

appropriate version.

04/21/23 22

Page 23: CSCI1302_Wenjia_Week4

A First Look at the clone Method (Cont.) A First Look at the clone Method (Cont.)

04/21/23 23

Page 24: CSCI1302_Wenjia_Week4

A First Look at the clone Method (Cont.) A First Look at the clone Method (Cont.)

• If a class has a copy constructor, the clone method for that class can use it to create the copy returned by the clone method.

04/21/23 24

Page 25: CSCI1302_Wenjia_Week4

Pitfall: Limitations of Copy Constructors Pitfall: Limitations of Copy Constructors

• The copy constructor and clone method for a class appear to do the same thing. – However, there are cases where only a clone will

work.

04/21/23 25