polymorphism

Views:
 
Category: Education
     
 

Presentation Description

No description available.

Comments

Presentation Transcript

Polymorphism : 

Polymorphism

Polymorphism : 

Polymorphism Polymorphism the ability for a variable (of a superclass type) to contain different objects of a subclass type at different points in time results in different functionality being executed for the same method call allows for run-time (dynamic) instead of compile-time (static) binding

Polymorphism (contd.) : 

Polymorphism (contd.) someanimal = somecat; someanimal.display(); someanimal = somebird; someanimal.display(); display is a method of Animal, Cat and Bird calls display() in Cat calls display() in Bird

Polymorphism (contd.) : 

Polymorphism (contd.) big deal!? Animal someanimal[0] = new Cat(“Siamese”, 15, “Grey”, “Raju”, “White”); Animal someanimal[1] = new Bird(“Eagle”, 100, “White”, 15.5, 70.76); ….. for (int j =0; j<200; j++) someanimal[j].display(); // I don’t have to worry if it is a Cat or a Bird

Polymorphism (contd.) : 

Polymorphism (contd.) polymorphism vs. overridding vs. overloading Can you tell the differences of these concepts?

Casting : 

Casting Casting Upwards Objects once created always know their type (class) You can assign objects of a subclass to a superclass object without using the cast operator (implicit casting) someanimal = somecat; The individual objects still know how to perform their behavior someanimal.display();

Casting (contd.) : 

Casting (contd.) Casting Downwards have to use use an explicit cast Cat somecat = someanimal; //syntax error!! Cat somecat = (Cat) someanimal; The object itself is NOT changed or converted. Casting is telling the compiler to ignore the "type mismatch." Run-time error could occur. Can't assign a super class to a sub class

Casting (contd.) : 

Casting (contd.) Casting Downwards have to use use an explicit cast You need to cast downwards to use methods defined only in the derived class type Animal someanimal = new Cat(“Siamese”, 15, “Grey”, “Raju”, “White”); Cat somecat = (Cat) someanimal; but you can create a run-time error by Animal someanimal = new Bird(“Eagle”, 100, “White”, 15.5, 70.76); Cat somecat = (Cat) someanimal; //Run-time ERROR!!

Casting (contd.) : 

Casting (contd.) Casting Downwards Animal someanimal = new Cat(“Siamese”, 15, “Grey”, “Raju”, “White”); someanimal.motion(); // syntax error since motion() is not a method of Animal ((Cat)someanimal).motion(); // OK Cat somecat = (Cat) someanimal; Animal someanimal = new Bird(“Eagle”, 100, “White”, 15.5, 70.76); Cat somecat = (Cat) someanimal; /* The compiler trust you that it will be a Cat. But you could make a mistake and create a run-time ERROR!! */ ((Cat)someanimal).motion(); // Run-Time error, too!!!

Casting (contd.) : 

Casting (contd.) Casting Downwards (cont.) Casting downwards to the wrong object is illegal use instanceof to check the class if (someanimal instanceof Cat) Cat somecat = (Cat) someanimal;

Casting (contd.) : 

Casting (contd.) Casting Downwards (cont.) for (int j =0; j< nOfAnimals; j++) if (someanimal[j] instance of Cat) someanimal[j].motion();// syntax error!!!! for (int j =0; j< nOfAnimals; j++) if (someanimal[j] instanceof Cat) { Cat somecat = (Cat) someanimal[j]; somecat.motion(); } or for (int j =0; j< nOfAnimals; j++) if (someanimal[j] instance of Cat) ((Cat)someanimal[j]).motion();