Chapter 13: Inheritance and Polymorphism - PowerPoint PPT Presentation

1 / 22
About This Presentation
Title:

Chapter 13: Inheritance and Polymorphism

Description:

Generally a specific instance of a superclass (Animal- Ferret) ... A makeSound() method may be different for a ferret and a platypus ... – PowerPoint PPT presentation

Number of Views:164
Avg rating:3.0/5.0
Slides: 23
Provided by: webIcs
Category:

less

Transcript and Presenter's Notes

Title: Chapter 13: Inheritance and Polymorphism


1
Chapter 13 Inheritance and Polymorphism
  • CS180 Fall 2006

2
Announcements
  • Project 5 grading is wait for it wait for
    itDONE!
  • Grades will be released by early next week
  • Gradesheets handed back in your labs
  • Hand back exam 2
  • Mean 67.8
  • Median 71
  • High 97
  • Next week generics
  • Online chapter
  • You should be able to access it with the password
    that came with your book (if you bought it in the
    bookstore)
  • Or go here http//www.cs.purdue.edu/mrcarlso/c
    s180
  • We will provide a user/password for you

3
Definitions
  • Inheritance object oriented way to form new
    classes from pre-existing ones
  • Superclass
  • The parent class
  • If class is final, cannot inherit from this class
  • Subclass
  • Class which inherits all non-private properties
    from the superclass
  • Generally a specific instance of a superclass
    (Animal-gtFerret)
  • Polymorphism a object can take many forms
  • Not all animals are ferrets, could be platypuss
    as well
  • A makeSound() method may be different for a
    ferret and a platypus
  • Combining the two, can create subclasses with
    different properties
  • Your platypus class may have a swim() method, but
    ferrets cannot swim!

4
Inheriting From the Superclass
  • Two ways
  • Use the protected keyword instead of the private
    keyword
  • Variables and methods which are protected are
    accessible by the subclass, but not the world
  • Use public for methods to inherit, private for
    methods to not inherit and all variables
  • Variables no longer accessible directly in
    subclass
  • Use accessors and mutators to modify them
  • Overwrite public (or protected) methods as
    necessary
  • If a method is declared final, then it cannot be
    overwritten in a subclass
  • Can also overload methods if desired
  • Constructors
  • Not inherited! Must rewrite them
  • Use super keyword to call superconstructor from
    parent class
  • Can only use super as first line of a constructor
  • If no superconstructor is explicitly called, then
    super() (the default superconstructor) is
    automatically called as the first line
  • super keyword can also be used to call instances
    of methods from superclasses

5
Syntax
  • To extend a class, use the extends keyword
  • The class will now inherit all non-private
    characteristics of the superclass
  • Do not have to re-write methods which are the
    same
  • Can introduce new methods and/or variables

public class A private int x public A()
set(0) public A(int x) set(x) public
void set(int x) this.x x public int get()
return x public void add1() bump()
private void bump() x public class B
extends A public B() super() public
B(int x) super(x) public void add1()
set(get()1)
6
Inheriting From the Superclass
public class A protected int x public A()
set(0) public A(int x) set(x) public
void set(int x) this.x x public int get()
return x public void add1() bump()
private void bump() x public class B
extends A public B() super() public
B(int x) super(x)
public class A private int x public A()
set(0) public A(int x) set(x) public
void set(int x) this.x x public int get()
return x public void add1() bump()
private void bump() x public class B
extends A public B() super() public
B(int x) super(x) public void add1()
set(get()1)
The add1() method is overwritten here!
7
Inheriting From the Superclass
On the superclass constructor calls, constructors
are executed top-down on the hierarchy.
public class A A() SOP(A) public
class B extends A public B() SOP(B)
public class C extends A public C()
SOP(C) public class D extends B public
D() SOP(D)
A new A() Output A B new B() Output
AB C new C() Output AC D new
D() Output ABD
8
Object Class
  • Class Object is the superclass of all
    superclasses in Java
  • All classes defined implicitly inherit from
    Object if not explicitly extending from another
    class
  • Even if explicitly extending another class, that
    other class either extends from another class or
    implicitly extends from Object
  • Some useful methods which are commonly
    overwritten
  • equals for comparisons (defaults to reference
    address comparision)
  • toString translates your object into an
    appropriate String (defaults to the reference
    address)

9
Polymorphism
public class Animal protected int
age public void makeSound() SOP(Make
sound!) public class Ferret extends Animal
public Ferret() super() public void
eatSweets() SOP(Yummy!) public void
makeSound() SOP(Squeal!) public class
Platypus extends Animal public Platypus()
super() public void swim() SOP(Swim!)
public void makeSound() SOP(Quack!)
_____________________________________________
Animal a new Ferret() a.swim() //
illegal! Not all animals know how to
swim! a.makeSound() // legal! All animals make
sounds! a.eatSweets() // illegal! Only
ferrets like candies and cookies!
  • Allows a variable to take on many forms
  • A variable of type Animal may point to may
    different types of animals
  • Only methods scoped within the variable type are
    available
  • Not all animals swim, so even though an Animal
    object may point to a platypus, you cannot call
    the swim() method

10
Dynamic Binding
  • On the call the makeSound(), what happens?
  • If Animal object a is a Platypus, then Quack!
  • If Animal object a is a Ferret, then Squeal!
  • Why not Make sound!? ? dynamic binding!
  • Objects have two types
  • Static type the type of the variable name
  • Dynamic type the actual type of the variable
    in memory
  • Dynamic binding
  • Used for method lookup
  • Look up most specific instance of method call
    (look up the method in the dynamic type if it
    exists)
  • Most specific instance of a method may be in a
    parent class

11
Dynamic Binding
public class A protected int x public A()
set(0) public A(int x) set(x) public
void set(int x) this.x x public int get()
return x public void bump() x2
public class B extends A public B()
super() public B(int x) super(x)
public void bump() x
static type
dynamic type
A a new B() a.bump() SOP(aa.get())
Object a is of static type A, dynamic type B. On
a method call, use dynamic type first!
12
Determining Class Type
  • In order to access a method in a subclass from an
    object with a static type of the superclass, need
    to downcast
  • Downcasting is unsafe! Need to know that
    downcast is legal.
  • Use instanceof keyword or other methods
  • x instanceof A true if x is an instance of
    class A or a subclass of A
  • x.getClass().equals(A.class) true if x is an
    instance of class A
  • A.class.isAssignableFrom(x.getClass()) is true if
    x is an instance of class A or a subclass of A

13
Determining Class Type
public class Animal protected int
age public void makeSound() SOP(Make
sound!) public class Ferret extends Animal
public Ferret() super() public void
eatSweets() SOP(Yummy!) public void
makeSound() SOP(Squeal!) public class
Platypus extends Animal public Platypus()
super() public void swim() SOP(Swim!)
public void makeSound() SOP(Quack!)
Animal a new Ferret() if (a instanceof
Ferret) ((Ferret)a).eatSweets() a new
Platypus() if (a.getClass()
Platypus.class) ((Platypus)a).swim() if
(Platypus.class.isAssignableFrom(a)) ((Platypus)a
).swim() ________________________________ Animal
a new Ferret() ((Platypus)a).swim() //
compiles, but runtime error!
14
Abstract Classes
  • Sometimes a superclass never needs to be
    instantiated you only make instances of the
    subclasses
  • Make class abstract
  • Cannot be instantiated
  • May have some methods be abstract
  • Is like a blueprint for subclasses, with methods
    that need to be filled in

public abstract class Animal protected int
age public abstract void makeSound() public
class Ferret extends Animal public Ferret()
super() public void eatSweets()
SOP(Yummy!) public void makeSound()
SOP(Squeal!) public class Platypus
extends Animal public Platypus() super()
public void swim() SOP(Swim!) public
void makeSound() SOP(Quack!)
15
Interfaces
  • Contains method headers
  • Cannot instantiate interface
  • Cannot have any non-final variables
  • A class can implement many interfaces
  • Interfaces can extend from each other
  • Example Comparable
  • Contains one method, compareTo, which takes two
    objects and compares them
  • Returns a negative number if less than
  • Returns 0 if equal to
  • Returns a positive number if greater than
  • Comparable is an interface and not an abstract
    class because not all things comparable are
    related
  • Numbers and people are both comparable, but have
    no reasonable relationship between them

16
Interfaces
public interface I public void
doStuff() public interface J extends I
public void doMoreStuff() public interface
K public void doEvenMoreStuff() public
class A implements J, K public void doStuff()
public void doMoreStuff() public void
doEvenMoreStuff
J extends I, so interface J actually has 2
methods doStuff() and doMoreStuff().
A implements J and K, so A must have a method for
each method in the interfaces it implements.
17
Putting It All Together
public abstract class Animal implements
SoundMaker protected int age public
abstract void makeSound() public class Ferret
extends Animal public Ferret() super()
public void eatSweets() SOP(Yummy!)
public void makeSound() SOP(Squeal!)
public class Platypus extends Animal
implements EggLayer, Swimmer public Platypus()
super() public void swim() SOP(Swim!)
public void makeSound() SOP(Quack!)
public void layEgg() SOP(Egg layed!)
public class Trumpet extends SoundMaker
public void makeSound() SOP(Toot!)
public interface SoundMaker public void
makeSound() public interface EggLayer
public void layEgg() public interface
Swimmer public void swim()
Images taken from Wikipedia.
18
Abstract Class vs. Interface
  • Abstract classes are blueprints, interfaces are
    contracts
  • Interface Heres some methods. If your class
    implements this interface, you must provide an
    implementation of each method in the interface in
    the class.
  • Method headers
  • final variables
  • A class can implement multiple interfaces
  • Cannot instantiate
  • Abstract class Heres a blueprint for a class.
    If your class extends this abstract class, you
    can use any functionality here and add onto it,
    but you must fill in what I have not.
  • Abstract method headers
  • Methods
  • Variables
  • A class can extend only one class
  • Cannot instantiate

19
Next Week, in CS180(think TV show voiceover)
  • Recall that arrays are fixed in size
  • Dynamic data structures allow us to create
    collections of objects which vary in size
  • Many found in java.util
  • Standard collections
  • Vector (a resizable array)
  • LinkedList (a chain of objects)
  • ArrayList (a hybrid of vectors and linked lists)
  • Special collections
  • Queue (interface first in first out structure)
  • Stack (last in first out structure)
  • We will talk about these structures in much more
    detail next week with generics (stay tuned)

20
Static Binding (optional)
  • The keyword static means that a variable or
    method lookup is resolved at compile time
  • In Java
  • Methods in a class are dynamically bound (unless
    said to be static)
  • Lookup resolved at runtime with dynamic binding
  • Variables in a class are statically bound
  • Use static binding to lookup values
  • This rarely occurs unless you make your variables
    public (which you shouldnt)

21
Static Binding (optional)
public class A public int x public A()
set(0) public A(int x) set(x) public
void set(int x) this.x x public int get()
return x public void bump() x2
public class B extends A public B()
super() public B(int x) super(x)
public void bump() x
A a new B() a.bump() SOP(aa.x) B b
new B(4) b.set(15) SOP(bb.x)
bs static and dynamic type are both B. On the
call to set, dynamic binding dictates that the
set method in class A is called. Since we are in
class A, the variable x, statically bound, is
used.
22
Static Binding (optional)
public class A public int x public A()
set(0) public A(int x) set(x) public
void set(int x) this.x x public int get()
return x public void bump() x2
public class B extends A public int x
-1 public B() super() public B(int x)
super(x) public void bump() x
A a new B() a.bump() SOP(aa.x) B b
new B(4) b.set(15) SOP(bb.x)
bs static and dynamic type are both B. On the
call to set, dynamic binding dictates that the
set method in class A is called. Since we are in
class A, the variable x in class A, statically
bound, is used. However, in the print out, x is
statically retrieved from a B static type object,
and thus -1 is printed out.
Moral None of this happens if 1) your
variables are private, and 2) you dont
re-declare the same objects in a subclass!
Write a Comment
User Comments (0)
About PowerShow.com