Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
cs205: engineering software university of virginia fall 2006 Subtyping and Inheritance David Evans www.cs.virginia.edu/cs205 Quiz Friday: classes through today, Ch 7 (except 7.9) Subtyping Cell ConwayLifeCell cs205: engineering software ConwayLifeCell is a subtype of Cell Cell is a supertype of ConwayLifeCell ConwayLifeCell ≤ Cell In Java API documentation: java.lang.Object Cell ConwayLifeCell 2 Subtype Substitution • If B is a subtype of A, everywhere the code expects an A, a B can be used instead • Examples: c1 must be a subtype of Cell Cell c = c1; (note A is a subtype of A) Cell c = new ConwayLifeCell (); ConwayLifeCell c = new Cell (); cs205: engineering software 3 Java’s Type Hierarchy Object Cell String ConwayLifeCell cs205: engineering software Object is the ultimate supertype of every object type. 4 Java Exception Hierarchy Object throws Throwable Objects thrown Throwable must be subtypes of Throwable Exception Subtypes of RuntimeException are unchecked RuntimeException IndexOutOfBoundsException cs205: engineering software IOException FileNotFoundException 5 Inheritance • To implement a subtype, it is often useful to use the implementation of its supertype • This is also called “subclassing” both subtyping and inheritance class B extends A B is a subtype of A B inherits from A just subtyping class C implements F C is a subtype of F No way to get inheritance without subtyping in Java cs205: engineering software 6 A Type Hierarchy Shape Quadrangle Triangle Equilateral Parallelogram Rhombus Rectangle Square cs205: engineering software EquilateralTriangle What are the supertypes of Square? What are the subtypes of Parallelogram? 7 A Class Hierarchy Shape Quadrangle Triangle Equilateral Parallelogram Rhombus Rectangle EquilateralTriangle Square cs205: engineering software 8 Reusing Implementations • Shapes should have a setColor method • Change Shape, Quadrangle, Parallelogram, Triangle, Equilateral, EquilateralTriangle, Rhombus, Rectangle, Square, etc. • Change Shape others inherit new attribute and method automatically cs205: engineering software 9 Add isEquilateral method class Shape { public bool isEquilateral () { return false; } } class Equilateral { public bool isEquilateral () { return true; } } cs205: engineering software 10 Is a Rhombus equilateral? Shape Quadrangle isEquilateral () { return false; } isEquilateral () { Equilateral return true; } Parallelogram Rhombus Inheritance can be tricky! isEquilateral? cs205: engineering software 11 Solutions • Java – Allow multiple supertypes using interfaces, but only one implementation – Pro: Safe and Simple, Con: Limits Reuse • C++ – Allow it, let programmers shoot themselves if they want • Eiffel – Explicit renaming or hiding (error if not done) cs205: engineering software 12 Java’s Solution: Interfaces • Define a type with no implementation • Classes can implement many interfaces: class B extends A implements I1, I2, I3 { … } means B is a subtype of A, I1, I2, and I3 B inherits the implementation of A cs205: engineering software 13 Example Interface public interface Comparable { int compareTo (Object o) { // EFFECTS: Compares this object with the specified // object for order. Returns a negative integer, zero, // or a positive integer as this object is less than, // equal to, or greater than the specified object. } } cs205: engineering software 14 Java’s Sorting Routines public class java.util.Arrays { public static void sort (Object[] a, int fromIndex, int toIndex) // REQUIRES: All elements in a between // fromIndex and toIndex must // implement the Comparable interface. // EFFECTS: Sorts the elements of a between // fromIndex and toIndex into ascending // order, according to the natural ordering of // its elements (defined by compareTo). cs205: engineering software 15 Charge • Subtyping – Allow one type to be used where another type is expected • Inheritance – Reuse implementation of the supertype to implement a subtype • Friday, Monday: – When is it safe to say B is a subtype of A? cs205: engineering software 16