Polymorphism.

Slides:



Advertisements
Similar presentations
STRING AN EXAMPLE OF REFERENCE DATA TYPE. 2 Primitive Data Types  The eight Java primitive data types are:  byte  short  int  long  float  double.
Advertisements

Written by: Dr. JJ Shepherd
1 Lecture 3 Inheritance. 2 A class that is inherited is called superclass The class that inherits is called subclass A subclass is a specialized version.
Topic 6 Generic Data Structures "Get your data structures correct first, and the rest of the program will write itself." - David Jones.
1 Topic 4 Inheritance "Question: What is the object oriented way of getting rich? Answer: Inheritance.“
CS 307 Fundamentals of Computer Science ADTS and Generic Data Structures 1 Topic 12 ADTS, Data Structures, Java Collections and Generic Data Structures.
Inheritance and Polymorphism
CS221 - Computer Science II Polymorphism 1. CS221 - Computer Science II Polymorphism 2 Outline  Explanation of polymorphism.  Using polymorphism to.
CS221 - Computer Science II Polymorphism 1 Inheritance "Question: What is the object oriented way of getting rich? Answer: Inheritance.“ “Inheritance is.
Chapter 21 Generics 1. Generics - Overview Generic Methods specify a set of related methods Generic classes specify a set of related types Software reuse.
Method Overriding Remember inheritance: when a child class inherits methods, variables, etc from a parent class. Example: public class Dictionary extends.
Outline Character Strings Variables and Assignment Primitive Data Types Expressions Data Conversion Interactive Programs Graphics Applets Drawing Shapes.
Hello.java Program Output 1 public class Hello { 2 public static void main( String [] args ) 3 { 4 System.out.println( “Hello!" ); 5 } // end method main.
Week 14 - Monday.  What did we talk about last time?  Introduction to C++  Input and output  Functions  Overloadable  Default parameters  Pass.
1 Abstract Classes “I prefer Agassiz in the abstract, rather than in the concrete.” CS Computer Science II.
RIT Computer Science Dept. Goals l Inheritance l Modifiers: private, public, protected l Polymorphism.
Outline §Review of the last class l class variables and methods l method overloading and overriding §Inheritance and polymorphism l polymorphism l abstract.
CS221 - Computer Science II Polymorphism 1. CS221 - Computer Science II Polymorphism 2 Outline  Explanation of polymorphism.  Using polymorphism to.
Polymorphism. 3 main programming mechanisms that constitute OOP: 1. Encapsulation 2. Inheritance 3. Polymorphism.
Topic 4 Inheritance.
Programming in Java CSCI-2220 Object Oriented Programming.
Types in programming languages1 What are types, and why do we need them?
Type == Class  reference type -- store only the object’s address  simple (primitive) type -- for storing small data values Other options Wrapper classes.
Java Basics Opening Discussion zWhat did we talk about last class? zWhat are the basic constructs in the programming languages you are familiar.
Inheritance. Inheritance - Introduction Idea behind is to create new classes that are built on existing classes – you reuse the methods and fields and.
Chapter 5 Objects and Classes Inheritance. Solution Assignments 3 & 4 Review in class…..
1 COSC2007 Data Structures II Chapter 9 Class Relationships.
Generic Data Structures "Get your data structures correct first, and the rest of the program will write itself." - David Jones EE 422CGenerics 1.
Quick Review of OOP Constructs Classes:  Data types for structured data and behavior  fields and methods Objects:  Variables whose data type is a class.
Written by: Dr. JJ Shepherd
OOP in Java : © W. Milner 2005 : Slide 1 Java and OOP Part 3 – Extending classes.
CSC 205 Programming II Lecture 4 Abstract Class. The abstract keyword indicate that a class is not instantiable Defining a type which will be specialized.
1 Topic 5 Polymorphism "“Inheritance is new code that reuses old code. Polymorphism is old code that reuses new code.”
Class Inheritance Part II: Overriding and Polymorphism Corresponds with Chapter 10.
Modern Programming Tools And Techniques-I
Polymorphism.
JAVA MULTIPLE CHOICE QUESTION.
Chapter 4 Assignment Statement
Inheritance ITI1121 Nour El Kadri.
Chapter 11 Inheritance and Polymorphism
Objects as a programming concept
Inheritance and Polymorphism
Java Generics.
Fifth Lecture Arrays and Lists
IST311 Advanced Issues in OOP: Inheritance and Polymorphism
Interfaces I once attended a Java user group meeting where James Gosling (Java's inventor) was the featured speaker. During the memorable Q&A session,
Chapter 3 Assignment Statement
Interfaces and Inheritance
Continuing Chapter 11 Inheritance and Polymorphism
Topic 6 Generic Data Structures
Inheritance "Question: What is the object oriented way of getting rich? Answer: Inheritance.“ “Inheritance is new code that reuses old code. Polymorphism.
Generics.
Methods and Parameters
Designing for Inheritance
Topic 7 Interfaces I once attended a Java user group meeting where James Gosling (one of Java's creators) was the featured speaker. During the memorable.
Chapter 9 Inheritance and Polymorphism
Chapter 19 Generics Dr. Clincy - Lecture.
Java Programming Language
CS201: Data Structures and Discrete Mathematics I
Topic 10 Abstract Classes “I prefer Agassiz in the abstract,
Topic 4 Inheritance "Question: What is the object oriented way of getting rich? Answer: Inheritance.“
Topic 5 Polymorphism "“Inheritance is new code that reuses old code. Polymorphism is old code that reuses new code.”
Topic 10 Abstract Classes “I prefer Agassiz in the abstract,
Focus of the Course Object-Oriented Software Development
Java Programming Review 1
Polymorphism.
Java Programming Language
Java Programming: From the Ground Up
Agenda Types and identifiers Practice Assignment Keywords in Java
Polymorphism.
Presentation transcript:

Polymorphism

CS 221 - Computer Science II Outline Explanation of polymorphism Use polymorphism to make generic data structures CS 221 - Computer Science II

CS 221 - Computer Science II Polymorphism Another key feature of OOP. Literally “having many forms.” Object variables in Java are polymorphic. Object variables can refer to: objects or their declared type AND any objects that are descendants of the declared type. Shape s; // abstract class s = new Shape(); //illegal! s = new Rectangle();//sub-class legal! CS 221 - Computer Science II

CS 221 - Computer Science II Data Type Class variables have: a declared type: Also called the static type. a dynamic type. What is the actual type of the pointee at run time or when a particular statement is executed? Method calls are syntactically legal if the method is in the declared type or any ancestor of the declared type The actual method that is executed at runtime is based on the dynamic type. dynamic dispatch CS 221 - Computer Science II

CS 221 - Computer Science II Question Consider the following class declarations: public class BoardSpace public class Property extends BoardSpace public class Street extends Property public class Railroad extends Property Which of the following statements would cause a syntax error, assuming all classes have a default constructor? A. Object obj = new Railroad(); B. Street s = new BoardSpace(); C. BoardSpace b = new Street(); D. Railroad r = new Street(); E. More than one of these CS 221 - Computer Science II

CS 221 - Computer Science II Question Consider the following class declarations: public class BoardSpace public class Property extends BoardSpace public class Street extends Property public class Railroad extends Property Which of the following statements would cause a syntax error, assuming all classes have a default constructor? A. Object obj = new Railroad(); B. Street s = new BoardSpace(); C. BoardSpace b = new Street(); D. Railroad r = new Street(); E. More than one of these. CS 221 - Computer Science II

CS 221 - Computer Science II What’s the Output? Shape s = new Rectangle(1,2); System.out.println(s.toString()); s = new Rectangle(2, 3, 4, 5); System.out.println(s.toString()); s = new Circle(4, 5, 10); System.out.println(s.toString()); s = new Shape(); System.out.println(s.toString()); CS 221 - Computer Science II

CS 221 - Computer Science II What’s the Output? Shape s = new Rectangle(1,2); System.out.println(s.toString()); x: 0 y: 0 width: 1 height: 2 s = new Rectangle(2, 3, 4, 5); System.out.println(s.toString()); x: 2 y: 3 width: 4 height: 5 s = new Circle(4, 5, 10); System.out.println(s.toString()); x: 4 y: 5 radius: 10 s = new Shape(); System.out.println(s.toString()); Error: won’t compile CS 221 - Computer Science II

CS 221 - Computer Science II Method LookUp To determine if a method is legal, the compiler looks in the class based on the declared type. If it finds it, great. If not, goes to the super class and looks there. Continues until the method is found, or the Object class is reached, then throws a compilation error. To determine which method is actually executed at runtime: Starts with the actual run-time class of the object calling the method. Searches the class for that method. If found, executes it. Otherwise, goes to the super class and keeps looking. Repeats until a version is found. Is it possible the runtime system won’t find a method? CS 221 - Computer Science II

CS 221 - Computer Science II Question 2 What is output by the code to the right? A. !!live B. !eggegg C. !egglive D. !!! E. eggegglive public class Animal { public String talk(){ return "!"; } } public class Mammal extends Animal { public String talk(){ return "live"; } } public class Platypus extends Mammal { public String talk(){ return "egg"; } Animal a1 = new Animal(); Animal a2 = new Platypus(); Mammal m1 = new Platypus(); System.out.print(a1.talk()); System.out.print(a2.talk()); System.out.print(m1.talk()); CS 221 - Computer Science II

CS 221 - Computer Science II Question 2 What is output by the code to the right? A. !!live B. !eggegg C. !egglive D. !!! E. eggegglive public class Animal { public String talk(){ return "!"; } } public class Mammal extends Animal { public String talk(){ return "live"; } } public class Platypus extends Mammal { public String talk(){ return "egg"; } Animal a1 = new Animal(); Animal a2 = new Platypus(); Mammal m1 = new Platypus(); System.out.print( a1.talk() ); System.out.print( a2.talk() ); System.out.print( m1.talk() ); CS 221 - Computer Science II

CS 221 - Computer Science II Generic Types CS 221 - Computer Science II

CS 221 - Computer Science II An Array-Based List Don't want to have to write a new list class for every data type we want to store in lists. Moved to an array of Objects to store the elements of the list. // from array-based list public class List { private Object[] data; … } CS 221 - Computer Science II

CS 221 - Computer Science II Using the Object Class In Java, all classes inherit from exactly one other class, except Object. Object variables can refer to objects of their declared type and any descendants. polymorphism Thus, if the internal storage container is of type Object, it can hold anything, including primitive data types. CS 221 - Computer Science II

CS 221 - Computer Science II Wrapper Classes Primitive Type Wrapper Type int Integer double Double char Character boolean Boolean float Float byte Byte short Short long Long Primitive wrapper class is a class that encapsulates, or wraps, data types from the eight primitive data types. These classes can be used to instantiate objects representing primitive data types. CS 221 - Computer Science II

Difficulties with Object Creating generic containers using the Object data type and polymorphism is relatively straightforward. Using these generic containers leads to some difficulties: Casting Type checking CS 221 - Computer Science II

CS 221 - Computer Science II Question 1 What is output by the following code? List list = new List(); // 1 String name = "Olivia"; list.add(name); // 2 System.out.print(list.get(0).charAt(2));// 3 A. i B. No output due to syntax error at line // 1. C. No output due to syntax error at line // 2. D. No output due to syntax error at line // 3. E. No output due to runtime error. CS 221 - Computer Science II

CS 221 - Computer Science II Question 1 What is output by the following code? List list = new List(); // 1 String name = "Olivia"; list.add(name); // 2 System.out.print(list.get(0).charAt(2));// 3 A. i B. No output due to syntax error at line // 1. C. No output due to syntax error at line // 2. D. No output due to syntax error at line // 3. E. No output due to runtime error. CS 221 - Computer Science II

CS 221 - Computer Science II Code Example - Casting List list = new List(); String name = "Olivia"; list.add(name); System.out.print(list.get(0).charAt(2)); // Causes syntax error – declared type // Object does not have a charAt method // Must cast to a String System.out.println(((String)list.get(0)).charAt(2)); CS 221 - Computer Science II

Code Example – Type Checking //assume all elements of list are Strings public void printFirstChar(List list) { String temp; for(int i = 0; i < list.size(); i++) temp = (String)list.get(i); if(temp.length() > 0) System.out.println(temp.charAt(0)); } // What happens if not Strings? CS 221 - Computer Science II

CS 221 - Computer Science II Too Generic? Does the compiler allow this? List list = new List(); list.add("Olivia"); list.add(new Integer(12)); list.add(new Rectangle()); list.add(new List()); Yes No CS 221 - Computer Science II

CS 221 - Computer Science II Too Generic? Does the compiler allow this? List list = new List(); list.add("Olivia"); list.add(new Integer(12)); list.add(new Rectangle()); list.add(new List()); Yes No CS 221 - Computer Science II

Is this a Bug or a Feature? CS 221 - Computer Science II

CS 221 - Computer Science II "Fixing" the Method //assume all elements of are Strings public void printFirstChar(ArrayList list) { String temp; for(int i = 0; i < list.size(); i++) if(list.get(i) instanceof String) temp = (String)list.get(i); if(temp.length() > 0) System.out.println(temp.charAt(0)); } CS 221 - Computer Science II

CS 221 - Computer Science II Generic Types Java has syntax for parameterized data types. Referred to as Generic Types. A traditional parameter has a data type and can store various values just like a variable. public void foo(int x) Generic Types are like parameters, but the data type for the parameter is a data type. It’s like a variable that stores a data type. This is an abstraction. Actually, all data type info is erased at compile time. CS 221 - Computer Science II

Making our List Generic Data type variables declared in class header. // from generic array-based list public class List<T> { private T[] data; … } The <T> is the declaration of a data type parameter for the class. Represents any legal class: Foo, MyClass, String, Double, Circle, etc. CS 221 - Computer Science II

Making our List Generic The value T will be filled in whenever a programmer creates a new object. List<String> list = new List<String>(); The effect is to create a String array to store data in. CS 221 - Computer Science II

CS 221 - Computer Science II Using Generic Types // list stores Strings List<String> list = new List<String>(); list.add("Isabelle"); System.out.println(list.get(0).charAt(2)); //OK list.add(new Rectangle()); // syntax error CS 221 - Computer Science II

Generic Types and Subclasses List<Shape> list = new List<Shape>(); list.add(new Rectangle()); // OK list.add(new Square()); // OK list.add( new Circle()); // OK list above can store Shape objects and any descendants of Shape. That’s polymorphism! CS 221 - Computer Science II

CS 221 - Computer Science II Why Bother? Polymorphism allows code reuse in another way. Inheritance and polymorphism allow programmers to create generic data structures. CS 221 - Computer Science II

CS 221 - Computer Science II