Inheritance and Polymorphism

1 / 86

Inheritance and Polymorphism - PowerPoint PPT Presentation

Inheritance and Polymorphism

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. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

1. Inheritance and Polymorphism

2. This section is not required material!!!! • Since we are ahead in lecture, I’m delving into it • If you feel confused, don’t worry • It will be gone over in more detail in CS 201 • Ask questions if you are confused about inheritance • You aren’t the only one!

3. Motivation • Consider a transportation computer game • Different types of vehicles: • Planes • Jets, helicopters, space shuttle • Automobiles • Cars, trucks, motorcycles • Trains • Diesel, electric, monorail • Ships • … • Let’s assume a class is written for each type of vehicle

4. Motivation • Sample code for the types of planes: • fly() • takeOff() • land() • setAltitude() • setPitch() • Note that a lot of this code is common to all types of planes • They have a lot in common! • It would be a waste to have to write separate fly() methods for each plane type • What if you then have to change one – you would then have to change dozens of methods

5. Motivation • Indeed, all vehicles will have similar methods: • move() • getLocation() • setSpeed() • isBroken() • Again, a lot of this code is common to all types of vehicles • It would be a waste to have to write separate move() methods for each vehicle type • What if you then have to change one – you would then have to change dozens of methods • What we want is a means to specify one move() method, and have each vehicle type inherit that code • Then, if we have to change it, we only have to change one copy

6. Motivation • Provides: • move() • getLocation() • setSpeed() • isBroken() • Provides: • fly() • takeOff() • land() • setAltitude() • setPitch() • Provides: • oilChange() • isInTraffic() • Provides: • derail() • getStation()

7. Motivation • What we will do is create a “parent” class and a “child” class • The “child” class (or subclass) will inherit the methods (etc.) from the “parent” class (or superclass) • Note that some classes (such as Train) are both subclasses and superclasses

8. Another example • Consider shapes in a graphics program • Shape class • Circle class • Cube class • Dodecahedron class

9. Inheritance • Organizes objects in a top-down fashion from most general to least general • Inheritance defines a “is-a” relationship • A mountain bike “is a” kind of bicycle • A SUV “is a” kind of automobile • A border collie “is a” kind of dog • A laptop “is a” kind of computer

10. Musical instrument hierarchy

11. Musical instrument hierarchy • The hierarchy helps us understand the relationships and similarities of musical instruments • A clarinet “is a” kind of reeded instrument • Reeded instruments “are a” kind of aerophone • The “is-a” relationship is transitive • A clarinet “is a” kind of reeded instrument • A reeded instrument “is a” kind of aerophone • A clarinet “is a” kind of aerophone

12. Reeded Musical Clarinet Aerophone Instrument Instrument Object-oriented terminology • In object-oriented programming languages, a class created by extending another class is called a subclass • The class used for the basis is called the superclass • Alternative terminology • The superclass is also referred to as the base class • The subclass is also referred to as the derived class

13. z-axis y-axis (x, y, z) x-axis ThreeDimensionalPoint • Build a new class ThreeDimensionalPoint using inheritance • ThreeDimensionalPoint extends the awt class Point • Point is the superclass (base class) • ThreeDimensionalPoint is the subclass (derived class) • ThreedimensionalPoint extends Point by adding a new property to Point—a z-coordinate

14. Class ThreeDimensionalPoint See next slide package geometry; import java.awt.*; public class ThreeDimensionalPoint extends Point { // private class constant  private final static int DEFAULT_Z = 0; // private instance variable  public int z = DEFAULT_Z; • Note that ThreeDimensionalPoint inherits the variables in the Point class • Thus, it has an x and y variables (inherited from Point) • And it has a z variable (defined above) Keyword extends indicatesthat ThreeDimensionalPointis a subclass of Point New instance variable

15. Bizarre links du jour • An eBay auction: • http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&category=19270&item=5535890757 • A new form of entertainment: • http://www.cnn.com/2004/US/11/16/life.hunting.reut/

16. Packages • Allow definitions to be collected together into a single entity—a package • ThreeDimensionalPoint will be added to the geometry package • Classes and names in the same package are stored in the same folder • Classes in a package go into their own namespace and therefore the names in a particular package do not conflict with other names in other packages • For example, a package called Graph might have a different definition of ThreeDimensionalPoint • When defining members of a class or interface, Java does not require an explicit access specification. The implicit specification is known as default access. Members of a class with default access can be accessed only by members of the package.

17. About extends • If class A extends class B • Then class A is the subclass of B • Class B is the superclass of class A • A “is a” B • A has (almost) all the methods and variables that B has • If class Train extends class Vehicle • Then class Train is the subclass of Vehicle • Class Vehicle is the superclass of class Train • Train “is a” Vehicle • Train has (almost) all the methods and variables that Vehicle has

18. Java’s Mother-of-all-objects—Class Object

19. Thus, everything extends Object • Either directly or indirectly • So what does that give us? • Object contains the following methods: • clone() • equals() • toString() • and others… • Thus, every class has those methods

20. A note about equals() • Why does the equals() method always have to have the following prototype: • boolean equals(Object obj) • Many other class in the Java SDK require the user of equals() • Such as the Vector class • Those classes need to know how the equals() method will work in order for them to work properly

21. ThreeDimensionalPoint • Methods toString(), equals() , and clone() should not have different signatures from the Point versions ThreeDimensionalPoint c = new ThreeDImensionalPoint(1, 4, 9); ThreeDimensionalPoint d = (ThreeDimensionalPoint) c.clone(); String s = c.toString(); boolean b = c.equals(d); Cast is necessary as return type of subclass methodclone() is Object Invocation of subclasstoString() method Invocation of subclassequals() method

22. ThreeDimensionalPoint • Constructors // ThreeDimensionalPoint(): default constructor  public ThreeDimensionalPoint() { super(); } // ThreeDimensionalPoint(): specific constructor  public ThreeDimensionalPoint(int a, int b, int c) { super(a, b); setZ(c); }

23. ThreeDimensionalPoint • Accessors and mutators // getZ(): z-coordinate accessor  publicdouble getZ() { return z; } // setZ(): y-coordinate mutator  publicvoid setZ(int value) { z = value; }

24. ThreeDimensionalPoint • Facilitators // translate(): shifting facilitator  publicvoid translate(int dx, int dy, int dz) { translate(dx, dy); int zValue = (int) getZ(); setZ(zValue + dz); } calls the inherited translate method in Point

25. ThreeDimensionalPoint ThreeDimensionalPoint a =new ThreeDimensionalPoint(6, 21, 54); a.translate(1, 1);    // invocation of superclass translate() a.translate(2, 2, 2); // invocation of 3DPoint’s translate() • Java determines which method to use based on the number of parameters in the invocation • After the first call to translate, what is the value of a? • After the second call to translate, what is the value of a? • Note that this is still overloading!

26. ThreeDimensionalPoint • Facilitators // toString(): conversion facilitator  public String toString() { int a = (int) getX(); int b = (int) getY(); int c = (int) getZ(); return getClass() + "[" + a + ", " + b + ", " + c + "]"; } • What’s getClass()?

27. ThreeDimensionalPoint • Facilitators // equals(): equality facilitator  publicboolean equals(Object v) { if (v instanceof ThreeDimensionalPoint) { ThreeDimensionalPoint p = (ThreeDimensionalPoint) v; int z1 = (int) getZ(); int z2 = (int) p.getZ(); returnsuper.equals(p) && (z1 == z2); } else { returnfalse; } } calls the inherited equals method in Point

28. ThreeDimensionalPoint • Facilitators // clone(): clone facilitator  public Object clone() { int a = (int) getX(); int b = (int) getY(); int c = (int) getZ(); returnnew ThreeDimensionalPoint(a, b, c); }

29. ColoredPoint • Suppose an application calls for the use of colored points. • We can naturally extend class Point to create ColoredPoint • Class ColoredPoint will be added to packagegeometry package geometry; import java.awt.*; public class ColoredPoint extends Point { // instance variable  Color color;…

30. Class hierarchy Object Point ThreeDimPoint ColoredPoint

31. ColoredPoint • Constructors // ColoredPoint(): default constructor  public ColoredPoint() { super(); setColor(Color.blue); } // ColoredPoint(): specific constructor  public ColoredPoint(int x, int y, Color c) { super(x, y); setColor(c); }

32. ColoredPoint • Accessors and mutators // getColor(): color property accessor  public Color getColor() { return color; } // setColor(): color property mutator  publicvoid setColor(Color c) { color = c; }

33. ColoredPoint • Facilitators // clone(): clone facilitator  public Object clone() { int a = (int) getX(); int b = (int) getY(); Color c = getColor(); returnnew ColoredPoint(a, b, c); }

34. ColoredPoint • Facilitators // toString(): string representation facilitator  public String toString() { int a = (int) getX(); int b = (int) getY(); Color c = getColor(); return getClass() + "[" + a + ", " + b + ", " + c + "]"; }

35. ColoredPoint • Facilitators // equals(): equal facilitator  publicboolean equals(Object v) { if (v instanceof ColoredPoint) { Color c1 = getColor(); Color c2 = ((ColoredPoint) v).getColor(); returnsuper.equals(v) && c1.equals(c2); } else { returnfalse; }

36. Colored3DPoint • Suppose an application needs a colored, three-dimensional point. • Can we create such a class by extending both ThreeDimensionalPoint and ColoredPoint?

37. Class hierarchy Object Point ThreeDimPoint ColoredPoint Colored3DPoint

38. Colored3DPoint • Java does not support multiple inheritance • Java only supports single inheritance • C++ supports multiple inheritance package Geometry; import java.awt.*; public class Colored3DPoint extends ThreeDimensionalPoint { // instance variable  Color color;

39. Class hierarchy Object Point ThreeDimPoint ColoredPoint Colored3DPoint

40. Colored3DPoint • Constructors // Colored3DPoint(): default constructor  public Colored3DPoint() { setColor(Color.blue); } // Colored3DPoint(): specific constructor  public Colored3DPoint(int a, int b, int c, Color d) { super(a, b, c); setColor(d); }

41. Colored3DPoint • Accessors and mutators // getColor(): color property accessor  public Color getColor() { return color; } // setColor(): color property mutator  public void setColor(Color c) { color = c; }

42. Colored3DPoint • Facilitators // clone(): clone facilitator  public Object clone() { int a = (int) getX(); int b = (int) getY(); int c = (int) getZ(); Color d = getColor(); returnnew Colored3DPoint(a, b, c, d); }

43. Colored3DPoint • Facilitators // toString(): string representation facilitator  public String toString() { int a = (int) getX(); int b = (int) getY(); int c = (int) getZ(); Color d = getColor(); return getClass() + "[" + a + ", " + b + ", " + c + ", " + d + "]"; }

44. Colored3DPoint • Facilitators // equals(): equal facilitator  publicboolean equals(Object v) { if (v instanceof Colored3DPoint) { Color c1 = getColor(); Color c2 = ((Colored3DPoint) v).getColor(); returnsuper.equals(v) && c1.equals(c2); } else { returnfalse; }

45. Biggest software errors • Ariane 5 rocket explosion (1996) • Due to loss of precision converting 64-bit double to 16-bit int • Pentium division error (1994) • Due to incomplete look-up table (like an array) • Patriot-Scud missile error (1991) • Rounding error on the time • The missile did not intercept an incoming Scud missile, leaving 28 dead and 98 wounded • Mars Climate Orbiter (1999) • Onboard used metric units; ground computer used English units • AT&T long distance (1990) • Wrong break statement in C code • Therac-25, X-ray (1975-1987) • Badly designed software led to radiation overdose in chemotherapy patients • NE US power blackout (2003) • Flaw in GE software contributed to it • References: http://www5.in.tum.de/~huckle/bugse.html, http://en.wikipedia.org/wiki/Computer_bug, http://www.cs.tau.ac.il/~nachumd/verify/horror.html

46. Overriding • Consider the following code: class Foo { // automatically extends Object public String toString () { return “Foo”; } } ... Foo f = new Foo(); System.out.println (f); • Now there are two toString() method defined • One inherited from class Object • One defined in class Foo • And they both have the same prototype! • Which one does Java call?

47. Overriding • Java will call the most specific overriden method it can • toString() in Foo is more specific than toString() in Object • Consider our transportation hierarchy: • Assume each class has its own toString() method • Car extends Automobile extends Vehicle (extends Object) • Assume each defines a toString() methods • The toString() method in Vehicle is more specific (to vehicles) than the one in Object • The toString() method in Automobiles is more specific than the ones in Vehicle or Object • The toString() method in Car is more specific than the ones in Automobile, Vehicle, or Object • Thus, for a Car object, the Car toString() will be called • There are ways to call the other toString() methods • This has to be specifically requested

48. Overriding • This is called overriding, because the toString() in Foo “overrides” the toString() in Object • Note that the prototype must be EXACTLY the same • With overloading, the parameter list must be DIFFERENT • Overriding only works with inheritance • In particular, you can only override a method already defined in a parent (or grandparent, etc.) class

49. Polymorphism • Consider toString() again • Although defined in Object, most classes define their own version • When an object is printed, which toString() method is called? • Consider overloading multiple constructors • Which is called – a specific constructor or a default constructor? • That depends on the parameter list supplied • The fact that Java can call different methods of the same name is called polymorphism • It may not be clear which method to call because of either overriding or overloading (or both!)

50. Polymorphism • A code expression can invoke different methods depending on the types of objects being manipulated • Example: function overloading like method min() from java.lang.Math • The method invoked depends on the types of the actual arguments Example int a, b, c; double x, y, z; … c = min(a, b); // invokes integer min() z = min(x, y); // invokes double min() • This polymorphism is dealing with overloadingmethods