1 / 28

Chapter 8 Polymorphism

Chapter 8 Polymorphism. Object-Oriented Concept. Object & Class Encapsulation Inheritance Polymorphism. Polymorphism. polymorphism: many forms. Polymorphism. Polymorphism (from the Greek, meaning "many forms", or something similar)

kay-foreman
Download Presentation

Chapter 8 Polymorphism

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 8 Polymorphism

  2. Object-Oriented Concept • Object & Class • Encapsulation • Inheritance • Polymorphism

  3. Polymorphism • polymorphism: many forms

  4. Polymorphism • Polymorphism (from the Greek, meaning "many forms", or something similar) • The mechanism by which several methods can have the same name and implement the same abstract operation. • Requires that there be multiple methods of the same name • The choice of which one to execute depends on the object that is in a variable • Reduces the need for programmers to code many if-else or switch statements

  5. Polymorphism DrawChart(1,2,1,2) DrawRect(1,2,1,2) DrawChart DrawTriangle(1,1,1) DrawCircle(1) DrawChart(1,1,1) DrawChart(1)

  6. Polymorphism Example

  7. Polymorphism • Add(integer, integer) • Add(string, string) • Add(string, integer) • Add(1,1)  2 • Add(“Hello”, “World”)  “HelloWorld” • Add(“Hello”, 2)  “Hello2”

  8. Polymorphism :HourlyPaidEmployee calculatePay()  :PaySlip :WeeklyPaidEmployee getTotalPay() calculatePay() :MonthlyPaidEmployee calculatePay()

  9. Which bill() version ? Which bill() version ? Which bill() versions ? Introductory example to Polymorphism

  10. Polymorphism • Methods can be overloaded. A method has the same name as another member methods, but the type and/or the count of parameters differs. class Integer { float val; void add( int amount ) { val = val + amount; } void add( int num, int den) { val = float(num) / den; } }

  11. Polymorphism is the ability to associate many meanings to one method name It does this through a special mechanism known as late binding or dynamic binding Inheritance allows a base class to be defined, and other classes derived from it Code for the base class can then be used for its own objects, as well as objects of any derived classes Polymorphism allows changes to be made to method definitions in the derived classes. Polymorphism

  12. The process of associating a method definition with a method invocation is called binding. If the method definition is associated with its call when the code is compiled, that is called early binding. If the method definition is associated with its call when the method is invoked (at run time), that is called late binding or dynamic binding. Late Binding

  13. The Sale class contains two instance variables name: the name of an item (String) price: the price of an item (double) It contains two constructors A no-argument constructor that sets name to "No name yet", and price to 0.0 A two-parameter constructor that takes in a String (for name) and a double (for price) The Sale and DiscountSale Classes

  14. The Sale class also has a set of accessors (getName, getPrice), mutators (setName, setPrice), overridden methods equals and toString a static announcement method. a method bill, that determines the bill for a sale, which simply returns the price of the item. It has also two methods, equalDeals and lessThan, each of which compares two sale objects by comparing their bills and returns a boolean value. The Sale and DiscountSale Classes

  15. The DiscountSale class inherits the instance variables and methods from the Sale class. In addition, it has its own instance variable, discount(a percent of the price), it has also its own suitable constructor methods, accessor method (getDiscount), mutator method (setDiscount), overriden toString method, and static announcement method. It has also its own bill method which computes the bill as a function of the discount and the price. The Sale and DiscountSale Classes

  16. The Sale and DiscountSale Classes • The Sale class lessThan method • Note the bill() method invocations: public boolean lessThan (Sale otherSale) { if (otherSale == null) { System.out.println("Error:null object"); System.exit(0); } return (bill( ) < otherSale.bill( )); }

  17. The Sale and DiscountSale Classes • The Sale class bill() method: public double bill( ) { return price; } • The DiscountSale class bill() method: public double bill( ) { double fraction = discount/100; return (1 - fraction) * getPrice( ); }

  18. Given the following in a program: . . . Sale simple = new sale(“xx", 10.00); DiscountSale discount = new DiscountSale(“xx", 11.00, 10); . . . if (discount.lessThan(simple)) System.out.println("$" + discount.bill() + " < " + "$" + simple.bill() + " because late-binding works!"); . . . Output would be: $9.90 < $10 because late-binding works! The Sale and DiscountSale Classes

  19. In the previous example, the boolean expression in the if statement returns true. As the output indicates, when the lessThan method in the Sale class is executed, it knows which bill() method to invoke The DiscountSale class bill() method for discount, and the Sale class bill() method for simple. Note that when the Sale class was created and compiled, the DiscountSale class and its bill() method did not yet exist These results are made possible by late-binding The Sale and DiscountSale Classes

  20. 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 The final Modifier

  21. Upcasting is when an object of a derived class is assigned to a variable of a base class (or any ancestor class): Example: class Shape { int xpos, ypos ; public Shape(int x , int y){ xpos = x ; ypos = y ; } public void Draw() { System.out.println("Draw method called of class Shape") ; } } Upcasting and Downcasting

  22. class Circle extends Shape { int r ; public Circle(int x1 , int y1 , int r1){ super(x1 , y1) ; r = r1 ; } public void Draw() { System.out.println("Draw method called of class Circle") ; } } class UpcastingDemo { public static void main (String [] args) { Shape s = new Circle(10 , 20 , 4) ; s.Draw() ; } } Upcasting and Downcasting Output: Draw method called of class Circle

  23. When we wrote Shape S = new Circle(10 , 20 , 4), we have cast Circle to the type Shape. This is possible because Circle has been derived from Shape From Circle, we are moving up to the object hierarchy to the type Shape, so we are casting our object “upwards” to its parent type. Upcasting and Downcasting

  24. Downcasting is when a type cast is performed from a base class to a derived class (or from any ancestor class to any descendent class). Example: class Shape { int xpos, ypos ; public Shape(int x , int y){ xpos = x ; ypos = y ; } public void Draw() { System.out.println("Draw method called of class Shape") ; } } Upcasting and Downcasting

  25. class Circle extends Shape { int r ; public Circle(int x1 , int y1 , int r1){ super(x1 , y1) ; r = r1 ; } public void Draw() { System.out.println("Draw method called of class Circle") ; } publicvoid Surface() { System.out.println("The surface of the circle is " +((Math.PI)*r*r)); } } Upcasting and Downcasting

  26. class DowncastingDemo { public static void main (String [] args) { Shape s = new Circle(10 , 20 , 4) ; ((Circle) s).Surface() ; } } Upcasting and Downcasting Output: The surface of the circle is 50.26

  27. When we wrote Shape s = new Circle(10 , 20 , 4) we have cast Circle to the type shape. In that case, we are only able to use methods found in Shape, that is, Circle has inherited all the properties and methods of Shape. If we want to call Surface() method, we need to down-cast our type to Circle. In this case, we will move down the object hierarchy from Shape to Circle : ((Circle) s).Surface() ; Upcasting and Downcasting

  28. It is the responsibility of the programmer to use downcasting only in situations where it makes sense The compiler does not check to see if downcasting is a reasonable thing to do Using downcasting in a situation that does not make sense usually results in a run-time error. Downcasting

More Related