polymorphism Nov. 25, 2016 1 Recall example from lecture 30 Dog - - PowerPoint PPT Presentation

polymorphism
SMART_READER_LITE
LIVE PREVIEW

polymorphism Nov. 25, 2016 1 Recall example from lecture 30 Dog - - PowerPoint PPT Presentation

COMP 250 Lecture 32 polymorphism Nov. 25, 2016 1 Recall example from lecture 30 Dog myDog = new Beagle(); class Dog String serialNumber myDog.bark(); Person owner void bark() ?????? {print


slide-1
SLIDE 1

1

COMP 250

Lecture 32

polymorphism

  • Nov. 25, 2016
slide-2
SLIDE 2

class Dog String serialNumber Person owner void bark() {print “woof”} : class Beagle void hunt () void bark() {print “aowwwuuu”}

Recall example from lecture 30

extends class Doberman void fight () void bark() {print “Arh! Arh! Arh!”} extends

Dog myDog = new Beagle(); myDog.bark();  ??????

slide-3
SLIDE 3

class Dog String serialNumber Person owner void bark() {print “woof”} : class Beagle void hunt () void bark() {print “aowwwuuu”}

Recall example from lecture 30

extends class Doberman void fight () void bark() {print “Arh! Arh! Arh!”} extends

Dog myDog = new Beagle(); myDog.bark();  “aowwwuuu”

slide-4
SLIDE 4

Polymorphism

“poly” = multiple “morph” = form

We will look at “sub-type” polymorphism. More general discussion about this in higher level courses e.g. COMP 302.

slide-5
SLIDE 5

Polymorphism

Compile time:

Suppose a reference variable has a declared type: class C. C var;

Runtime:

That reference variable can reference any object of class C

  • r that extends class C.
slide-6
SLIDE 6

Polymorphism

Compile time:

Suppose a reference variable has a declared type: abstract class A. A var;

Runtime:

That reference variable can reference any object whose class extends abstract class A.

slide-7
SLIDE 7

Polymorphism

Compile time:

Suppose a reference variable has a declared type: interface I. I var;

Runtime:

That reference variable can reference any object whose class implements interface I.

slide-8
SLIDE 8

boolean b; Object obj; : if ( b )

  • bj = new float[23];

else

  • bj = new Dog();

System.out.print( obj ); // calls toString()

slide-9
SLIDE 9

How does polymorphism work? How does all this class relationship stuff work in a running program ? (Sketch only.)

slide-10
SLIDE 10

Dog

class descriptor

Java Class Descriptors

A class descriptor is an object that contains all the information about a class that is used in a running program. Beagle

class descriptor

String

class descriptor

LinkedList

class descriptor

slide-11
SLIDE 11

Class Descriptors

  • class name
  • fields (names, types)
  • methods (names, parameters, implementation)
  • reference to superclass
  • ….
slide-12
SLIDE 12

Dog

  • bject

Beagle

  • bject

Beagle

  • bject

Doberman

  • bject

Doberman

  • bject
  • ther
  • bjects

Dog class descriptor Beagle class descriptor LinkedList class descriptor Doberman class descriptor String class descriptor

Q: Each object is an instance of a class. So, if class descriptors are objects, then what class(es) are they instances of ?

slide-13
SLIDE 13

Q: Each object is an instance of a class. So, if class descriptors are objects, then what class(es) are they instances of ? A: the Class class

https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html

Dog

  • bject

Beagle

  • bject

Beagle

  • bject

Doberman

  • bject

Doberman

  • bject
  • ther
  • bjects

Dog class descriptor Beagle class descriptor LinkedList class descriptor Doberman class descriptor String class descriptor

slide-14
SLIDE 14

class Animal : class Dog : class Beagle : extends extends

class Object

boolean equals( Object ) int hashCode( ) String toString( ) Object clone( ) Class getClass()

extends (automatic)

class Class

Class getSuperClass() Method[ ] getMethods( ) Field[ ] getFields( ) String getName( ) :

extends

‘class descriptor’ class

slide-15
SLIDE 15

All objects inherit the Object.getClass() method. This method returns the class descriptor for that object.

Dog

  • bject

Beagle

  • bject

Beagle

  • bject

Doberman

  • bject

Doberman

  • bject

Dog class descriptor Beagle class descriptor LinkedList class descriptor Doberman class descriptor String class descriptor getClass() returns getClass() returns getClass() returns

slide-16
SLIDE 16

All objects inherit the Object.getClass() method. This method returns the class descriptor for that object.

Dog

  • bject

Beagle

  • bject

Beagle

  • bject

Doberman

  • bject

Doberman

  • bject

Dog class descriptor Beagle class descriptor LinkedList class descriptor Doberman class descriptor String class descriptor getClass() returns getClass() returns getClass() returns Class class descriptor getClass() returns Object class descriptor getClass() returns

slide-17
SLIDE 17

class Animal : class Dog : class Beagle : extends extends

class Object

boolean equals( Object ) int hashCode( ) String toString( ) Object clone( ) Class getClass()

extends (automatic)

class Class

Class getSuperClass() Method[ ] getMethods( ) Field[ ] getFields( ) String getName( ) :

extends

‘class descriptor’ class

slide-18
SLIDE 18

Dog

  • bject

Beagle

  • bject

Beagle

  • bject

Doberman

  • bject

Doberman

  • bject

Object class descriptor Beagle class descriptor Doberman class descriptor getSuperClass() returns Dog class descriptor getSuperClass() returns getSuperClass() returns

slide-19
SLIDE 19

Dog

  • bject

Beagle

  • bject

Beagle

  • bject

Doberman

  • bject

Doberman

  • bject

Beagle class descriptor Doberman class descriptor Dog class descriptor getSuperClass() returns getClass() returns getClass() returns Object class descriptor getSuperClass() returns

slide-20
SLIDE 20

Dog myDog = new Beagle(); System.out.println( myDog );

Beagle

  • bject

Beagle class descriptor Dog class descriptor getSuperClass() returns getClass() returns Object class descriptor getSuperClass() returns

slide-21
SLIDE 21

Beagle

  • bject

Beagle class descriptor Dog class descriptor Object class descriptor

  • ther
  • bjects

What else do we need to run a program? e.g. Consider running a Test class which has a main() method.

Test class descriptor

slide-22
SLIDE 22

Beagle

  • bject

Beagle class descriptor Dog class descriptor Object class descriptor

  • ther
  • bjects

Test.main() someMethod() anotherMethod() goForWalk()

Call Stack

Test class descriptor

slide-23
SLIDE 23

Beagle class descriptor Dog class descriptor Object class descriptor

  • ther
  • bjects

Test.main()

Dog myDog

Beagle()

Call Stack

Dog myDog = new Beagle(); // in main() method

Test class descriptor

slide-24
SLIDE 24

Beagle

  • bject

Beagle class descriptor Dog class descriptor Object class descriptor

  • ther
  • bjects

Test.main()

Dog myDog

Call Stack

Dog myDog = new Beagle(); // after instruction is done….

Test class descriptor

slide-25
SLIDE 25

Beagle

  • bject

Beagle class descriptor Dog class descriptor Object class descriptor

  • ther
  • bjects

Test.main()

Dog myDog

bark() this

Call Stack

Dog myDog = new Beagle(); myDog.bark()

TestProgram class descriptor

Look for the bark() method in the class descriptor

slide-26
SLIDE 26

Beagle

  • bject

Beagle class descriptor Dog class descriptor Object class descriptor

  • ther
  • bjects

Test.main() bark()

Call Stack

TestProgram class descriptor

Class Descriptors Objects

Local variables and parameters of methods are here Object instance fields are here Methods are here