25
Object Oriented Programming Polymorphism Method overriding Method overloading Dynamic binding 1

Polymorphism Method overriding Method overloading Dynamic binding 1

Embed Size (px)

Citation preview

Page 1: Polymorphism Method overriding Method overloading Dynamic binding 1

Object Oriented Programming

Polymorphism•Method overriding•Method overloading•Dynamic binding

1

Page 2: Polymorphism Method overriding Method overloading Dynamic binding 1

Introduction to polymorphismPolymorphism is the ability to take more

than one formEarlier on we discussed polymorphism

through operator overloading where an operator like “+” can be used for math addition, string concatenation, and for matrix addition.

This is equivalent to a word having different meanings depending on the context

2

Page 3: Polymorphism Method overriding Method overloading Dynamic binding 1

Introduction to polymorphism – cont’d

Polymorphism enables objects with different internal structures to share the same external interface

This means same interface may be accessed by different classes that work differently as shown in figure below:

3

Page 4: Polymorphism Method overriding Method overloading Dynamic binding 1

Fig: Polymorphism

4

<Shape>

Draw()

Circle

Draw()

Rectangle

Draw()

Triangle

Draw()

Page 5: Polymorphism Method overriding Method overloading Dynamic binding 1

Introduction to polymorphism – cont’d

As we saw earlier, Java doesn’t implement operator overloading except the “+” operator

This lecture discusses how to implement polymorphism using method overriding and method overloading.

5

Page 6: Polymorphism Method overriding Method overloading Dynamic binding 1

Method overridingOverriding means redefining a method of a

class in its subclassThe method name and signature (number and

type of parameters it requires) remain unchanged i.e. only the method body changes

6

Page 7: Polymorphism Method overriding Method overloading Dynamic binding 1

Example: Overridingpublic class Super { int x; Super(int x) { this.x=x; } void display() { System.out.println("Super x = "+x); }}

7

Page 8: Polymorphism Method overriding Method overloading Dynamic binding 1

Example: Overridingpublic class Sub extends Super { int y; Sub (int x, int y) { super(x); this.y = y; } void display() { System.out.println("Super x = "+ x); System.out.println("Sub y = "+ y); }}

8

Page 9: Polymorphism Method overriding Method overloading Dynamic binding 1

Example: Overridingpublic class OverrrideTest { public static void main(String args[]) { Sub a = new Sub(100,200); a.display(); }}

9

Page 10: Polymorphism Method overriding Method overloading Dynamic binding 1

Example: OverridingWe use this keyword to access a variable

of the current classWe use the inbuilt super method to access a

variable of the super classIn the above example, the Sub class

display() method overrides the Super class display() method

If we call the Sub class, we get a different behavior from that of the Super class

10

Page 11: Polymorphism Method overriding Method overloading Dynamic binding 1

Example: Overriding in AppletsApplets always inherit from the Applet classThis class has methods such as init(), start(),

stop(), destroyThese methods are available for use by

applets to give them their runtime behavior

11

Page 12: Polymorphism Method overriding Method overloading Dynamic binding 1

Example: Overriding in AppletsApplets are good examples of both the

inheritance and the polymorphism principles. To make an applet unique, various life cycle

methods are overridden as shown in example below

12

Page 13: Polymorphism Method overriding Method overloading Dynamic binding 1

Example: Overriding in Appletsimport java.awt.*; import java.applet.*;

public class NestedApplet extends Applet { // display params int width=400; int height=200; int level=100; int inc=10; // first override the life cycle methods public void init() { System.out.println("Initializing"); incNesting(); }

13

Page 14: Polymorphism Method overriding Method overloading Dynamic binding 1

Example: Overriding in Applets public void start() { System.out.println("Starting."); incNesting(); } public void stop() { System.out.println("Stopping."); incNesting(); } public void destroy() { System.out.println("Shutting down."); incNesting(); }

14

Page 15: Polymorphism Method overriding Method overloading Dynamic binding 1

Example: Overriding in Appletspublic void paint(Graphics g) { int i, shift=0; g.setColor(Color.blue); for (i=0;i<level;i++) { g.drawRect(shift,shift,width-2*shift-1,height-2*shift-1);

shift = shift + inc; } g.drawString("Nesting level = "+level,width/2-50,height/2+5);

} public void incNesting() { level++; repaint(); }}

15

Page 16: Polymorphism Method overriding Method overloading Dynamic binding 1

OverloadingOverloading is another technique to

implement polymorphismHere the method name is retained, but the

signature changesUsed when a method is required to perform

similar tasks but using different input parameters

16

Page 17: Polymorphism Method overriding Method overloading Dynamic binding 1

Overloading – cont’d

When we call a method, Java matches the Method name, Number of parameters, andType of parameters

The matching method is then executed

17

Page 18: Polymorphism Method overriding Method overloading Dynamic binding 1

Overloading – cont’d

Overloading does not require inheritanceAll we need to do is define several versions of

the same methodDefined methods should have different number

and type of parametersChange their body definition as appropriate

We can overload both constructors and ordinary methods

18

Page 19: Polymorphism Method overriding Method overloading Dynamic binding 1

Overloading – cont’d

In the example below, the constructor method is overloaded such that one takes one integer parameter and the other takes two integer parameters

The matching will be done at runtime, depending on how many parameters you supply

19

Page 20: Polymorphism Method overriding Method overloading Dynamic binding 1

Example: Overloadingclass Room { int length, breadth; Room(int x, int y) { length = x; breadth = y; } Room(int x) { length = breadth=x; } int area() { return(length*breadth); }}

20

Page 21: Polymorphism Method overriding Method overloading Dynamic binding 1

Example: Overloadingclass RectangleSquare {

public static void main(String args[]) {Room room1 = new Room(25, 15);Room room2 = new Room(20);int area1 = room1.area();int area2 = room2.area();System.out.println("Area of Rectangle = "+area1);System.out.println("Area of Square = "+area2);

}

}

21

Page 22: Polymorphism Method overriding Method overloading Dynamic binding 1

Overloading vs. OverridingDon't confuse the concepts of overloading and

overriding

Overloading deals with multiple methods in the same class with the same name but different signatures

Overriding deals with two methods, one in a parent class and one in a child class, that have the same signature

Overloading lets you define a similar operation in different ways for different data

Overriding lets you define a similar operation in different ways for different object types

22

Page 23: Polymorphism Method overriding Method overloading Dynamic binding 1

Dynamic BindingBinding is the

Linking of a procedure call to the code to be executed in response to the call

Dynamic binding is theThe code to be executed is not known until the

time of the call at runtimeAssociated with polymorphism and inheritance.

23

Page 24: Polymorphism Method overriding Method overloading Dynamic binding 1

Example: Dynamic Binding

24

Shape

Draw()

Circle Object

Draw(Circle)

Box Object

Draw(Box)

Rectangle Object

Draw(Rectangle)

Page 25: Polymorphism Method overriding Method overloading Dynamic binding 1

Dynamic binding exampleBy inheritance,

Each of the object will invoke the draw procedure

The algorithm will however be known at runtime depending on whether the user wants to draw circle or box or rectangle

Thus, at runtime The code matching the object under current

reference will be called.

25