Advanced Placement Computer Science. Inheritance and Polymorphism

Similar documents
Outline. Inheritance. Abstract Classes Interfaces. Class Extension Overriding Methods Inheritance and Constructors Polymorphism.

ITI Introduction to Computing II

ITI Introduction to Computing II

Topic 5 Polymorphism. " Inheritance is new code that reuses old code. Polymorphism is old code that reuses new code.

Java Object Oriented Design. CSC207 Fall 2014

CS-202 Introduction to Object Oriented Programming

CREATED BY: Muhammad Bilal Arslan Ahmad Shaad. JAVA Chapter No 5. Instructor: Muhammad Naveed

COMP200 INHERITANCE. OOP using Java, from slides by Shayan Javed

Java Class Design. Eugeny Berkunsky, Computer Science dept., National University of Shipbuilding

CMSC131. Inheritance. Object. When we talked about Object, I mentioned that all Java classes are "built" on top of that.

Object Oriented Programming in Java. Jaanus Pöial, PhD Tallinn, Estonia

CH. 2 OBJECT-ORIENTED PROGRAMMING

Inheritance. Transitivity

What is Inheritance?

OBJECT ORİENTATİON ENCAPSULATİON

Inheritance, Polymorphism, and Interfaces

Contents. I. Classes, Superclasses, and Subclasses. Topic 04 - Inheritance

Inheritance Motivation

INHERITANCE & POLYMORPHISM. INTRODUCTION IB DP Computer science Standard Level ICS3U. INTRODUCTION IB DP Computer science Standard Level ICS3U

COS226 - Spring 2018 Class Meeting # 13 March 26, 2018 Inheritance & Polymorphism

Day 4. COMP1006/1406 Summer M. Jason Hinek Carleton University

Reusing Classes. Hendrik Speleers

Lecture 36: Cloning. Last time: Today: 1. Object 2. Polymorphism and abstract methods 3. Upcasting / downcasting

Inheritance and Encapsulation. Amit Gupta

CS5000: Foundations of Programming. Mingon Kang, PhD Computer Science, Kennesaw State University

Super-Classes and sub-classes

Chapter 11 Inheritance and Polymorphism. Motivations. Suppose you will define classes to model circles,

Inheritance and Polymorphism

Object-oriented programming. and data-structures CS/ENGRD 2110 SUMMER 2018

Inheritance, and Polymorphism.

Introduction to Inheritance

Java and OOP. Part 3 Extending classes. OOP in Java : W. Milner 2005 : Slide 1

Inheritance and Polymorphism

Inheritance (continued) Inheritance

Chapter 10 Inheritance and Polymorphism. Dr. Hikmat Jaber

Inheritance. Inheritance allows the following two changes in derived class: 1. add new members; 2. override existing (in base class) methods.

CS/ENGRD 2110 SPRING Lecture 7: Interfaces and Abstract Classes

Graphical Interface and Application (I3305) Semester: 1 Academic Year: 2017/2018 Dr Antoun Yaacoub

CS1150 Principles of Computer Science Objects and Classes

Today. Book-keeping. Inheritance. Subscribe to sipb-iap-java-students. Slides and code at Interfaces.

ITI Introduction to Computing II

Lecture Notes Chapter #9_b Inheritance & Polymorphism

Agenda. Objects and classes Encapsulation and information hiding Documentation Packages

Programming Exercise 14: Inheritance and Polymorphism

Practice for Chapter 11

Computer Science 210: Data Structures

ITI Introduction to Computing II

Object Oriented Programming. Java-Lecture 11 Polymorphism

Programming in C# Inheritance and Polymorphism

Software Paradigms (Lesson 3) Object-Oriented Paradigm (2)

1B1b Inheritance. Inheritance. Agenda. Subclass and Superclass. Superclass. Generalisation & Specialisation. Shapes and Squares. 1B1b Lecture Slides

Chapter 6: Inheritance

Programming II (CS300)

index.pdf January 21,

IST311. Advanced Issues in OOP: Inheritance and Polymorphism

Java Inheritance. Written by John Bell for CS 342, Spring Based on chapter 6 of Learning Java by Niemeyer & Leuck, and other sources.

CMSC 132: Object-Oriented Programming II

Last class. -More on polymorphism -super -Introduction to interfaces

Inheritance -- Introduction

The Essence of OOP using Java, Nested Top-Level Classes. Preface

More On inheritance. What you can do in subclass regarding methods:

Making New instances of Classes

Advanced Programming - JAVA Lecture 4 OOP Concepts in JAVA PART II

Polymorphism and Interfaces. CGS 3416 Spring 2018

Chapter 10 Classes Continued. Fundamentals of Java

More About Classes CS 1025 Computer Science Fundamentals I Stephen M. Watt University of Western Ontario

Inheritance. Inheritance Reserved word protected Reserved word super Overriding methods Class Hierarchies Reading for this lecture: L&L

8. Polymorphism and Inheritance

Argument Passing All primitive data types (int etc.) are passed by value and all reference types (arrays, strings, objects) are used through refs.

Methods Common to all Classes

CS 251 Intermediate Programming Inheritance

CS/ENGRD 2110 FALL Lecture 7: Interfaces and Abstract Classes

Inheritance & Polymorphism Recap. Inheritance & Polymorphism 1

Chapter 14 Abstract Classes and Interfaces

OVERRIDING. 7/11/2015 Budditha Hettige 82

Inheritance (Extends) Overriding methods IS-A Vs. HAS-A Polymorphism. superclass. is-a. subclass

What are the characteristics of Object Oriented programming language?

COP 3330 Final Exam Review

Inheritance. Notes Chapter 6 and AJ Chapters 7 and 8

STUDENT LESSON A20 Inheritance, Polymorphism, and Abstract Classes

Java Primer. CITS2200 Data Structures and Algorithms. Topic 2

OOPs Concepts. 1. Data Hiding 2. Encapsulation 3. Abstraction 4. Is-A Relationship 5. Method Signature 6. Polymorphism 7. Constructors 8.

Abstract Classes. Abstract Classes a and Interfaces. Class Shape Hierarchy. Problem AND Requirements. Abstract Classes.

Computer Science II (20073) Week 1: Review and Inheritance

Implements vs. Extends When Defining a Class

Introduction to Programming Using Java (98-388)

Basic Principles of OO. Example: Ice/Water Dispenser. Systems Thinking. Interfaces: Describing Behavior. People's Roles wrt Systems

Inheritance Systems. Merchandise. Television Camcorder Shirt Shoe Dress 9.1.1

CS-140 Fall 2017 Test 1 Version Practice Practice for Nov. 20, Name:

Lesson 10A OOP Fundamentals. By John B. Owen All rights reserved 2011, revised 2014

Questions Answer Key Questions Answer Key Questions Answer Key

INHERITANCE. Spring 2019

The Sun s Java Certification and its Possible Role in the Joint Teaching Material

CO Java SE 8: Fundamentals

Introduction to OOP with Java. Instructor: AbuKhleif, Mohammad Noor Sep 2017

C++ Important Questions with Answers

Inheritance (Deitel chapter 9)

Programming II (CS300)

Abstract Classes and Interfaces

Subclass Gist Example: Chess Super Keyword Shadowing Overriding Why? L10 - Polymorphism and Abstract Classes The Four Principles of Object Oriented

Transcription:

Advanced Placement Computer Science Inheritance and Polymorphism What s past is prologue. Don t write it twice write it once and reuse it. Mike Scott The University of Texas at Austin Inheritance, Polymorphism, and Interfaces 1

Main Tenants of OO Programming 8Encapsulation abstraction, information hiding, responsibility driven programming 8Inheritance code reuse, specialization "New code using old code." 8Polymorphism do X for a collection of various types of objects, where X is different depending on the type of object "Old code using new code." Inheritance, Polymorphism, and Interfaces 2

Explanation of Inheritance 81 of the fundamental principles of OOP allows code reuse 8Models the IS-A relationship a student is-a person an undergraduate is-a student a rectangle is-a shape a rook is-a piece 8Contrast with the Has-A relationship (or uses a) a student has-a name a rook has-a position a Stack uses a List 8Is-a relationships indicate inheritance, has-a relationships indicate composition (fields) Inheritance, Polymorphism, and Interfaces 3

Nomenclature of Inheritance 8The extends keyword is used to specify which preexisting class a new class is inheriting from public class Student extends Person 8Person is said to be the parent class of Student the super class of Student the base class of Student an ancestor of Student 8Student is said to be a child class of Person a sub class of Person a derived class of Person a descendant of Person Inheritance, Polymorphism, and Interfaces 4

The Mechanics of Inheritance 8 Java is a pure object oriented language 8 all code is part of some class 8 all classes, except one, must inherit from exactly one other class 8 The Object class is the cosmic super class The Object class does not inherit from any other class The Object class has several important methods: tostring, equals, hashcode, clone, getclass 8 implications: all classes are descendants of Object all classes, and thus all objects, have a tostring, equals, hashcode, clone, and getclass method tostring, equals, hashcode, clone normally overridden Inheritance, Polymorphism, and Interfaces 5

Inheriting from a Class 8If a class header does not include the extends clause the class extends the Object class by default public class Card Object is an ancestor to all classes it is the only class that does not extend some other class 8A class extends exactly one other class extending two or more classes is multiple inheritance. Java does not support this directly, rather it uses Interfaces. Inheritance, Polymorphism, and Interfaces 6

Implications of Inheritance 8The sub class gains all of the behavior (methods) and data regarding state (instance variables) of the super class and all ancestor classes 8Sub classes can: add new fields add new methods override existing methods (change behavior) 8Sub classes may not remove fields remove methods 8Note, even though an object may have instance variables from its parent they may not be accessible by the code of the child class if the fields are private Inheritance, Polymorphism, and Interfaces 7

The Real Picture Fields from Object class Instance variables declared in Object A String object Fields from String class Instance Variables declared in String Behaviors (methods) from String class and Object class. Inheritance, Polymorphism, and Interfaces 8

Access Modifiers and Inheritance 8public accessible to all classes 8private accessible only within that class. Hidden from all sub classes. 8protected accessible by classes within the same package and all descendant classes 8Instance variables should be private 8protected methods are used to allow descendant classes to modify instance variables in ways other classes can't Inheritance, Polymorphism, and Interfaces 9

Instance Variables - Private or Protected 8Why is it good design to make the instance variables of an object private instead of protected? 8protected also allows classes in the same package to access the data a class in a package does not necessarily inherit from other classes in the same package 8What if when the data changes something else must be done? How would the descendant classes know to do the required changes? Excellent example in the MBCS Inheritance, Polymorphism, and Interfaces 10

MBCS Example public class Fish { private Location myloc; // Why private? // What if subclasses override move() and need to change // the Location? Don't subclasses need access to it? private Environment theenv; // If a Fish changes its location theenv must be updated protected void changelocation(location newloc) { // Change location and notify Environment Location oldloc = location(); myloc = newloc; environment().recordmove(this, oldloc); // object is again at location myloc in environment Making myloc private and forcing sub classes to call changelocation to alter the location of a fish guarantees the environment is correctly updated with the now location. Inheritance, Polymorphism, and Interfaces 11

Shape Classes 8Declare a class called ClosedShape assume all shapes have x and y coordinates override Object's version of tostring 8Possible sub classes of ClosedShape Rectangle Circle Ellipse Square 8Possible hierarchy ClosedShape -> Rectangle -> Square Inheritance, Polymorphism, and Interfaces 12

A ClosedShape class public class ClosedShape { private int imyx; private int tmyy; public ClosedShape() { this(0,0); public ClosedShape (int x, int y) { imyx = x; imyy = y; public String tostring() { return "x: " + imyx + " y: " + imyy; public int getx(){ return imyx; public int gety(){ return imyy; // Other methods not shown Inheritance, Polymorphism, and Interfaces 13

Constructors 8Constructors handle initialization of objects 8When creating an object with one or more ancestors (every type except Object) a chain of constructor calls takes place 8The reserved word super may be used in a constructor to specify which of the parent's constructors to call must be first line of constructor 8if no parent constructor is explicitly called the default, 0 parameter constructor of the parent is called if no default constructor exists a syntax error results 8If a parent constructor is called another constructor in the same class may no be called no super();this(); allowed. One or the other, not both good place for an initialization method Inheritance, Polymorphism, and Interfaces 14

A Rectangle Constructor public class Rectangle extends ClosedShape { private int imywidth; private int imyheight; public Rectangle(int width, int height, int x, int y) { super(x,y); // calls the 2 int constructor in // ClosedShape imywidth = width; imyheight = height; // other methods not shown Inheritance, Polymorphism, and Interfaces 15

A Rectangle Class public class Rectangle extends ClosedShape { private int imywidth; private int imyheight; public Rectangle() { this(0, 0); public Rectangle(int width, int height) { this(width, height, 0, 0); public Rectangle(int width, int height, int x, int y) { super(x, y); imywidth = width; imyheight = height; public String tostring() { return super.tostring() + " width: " + imywidth + " height: " + imyheight; Inheritance, Polymorphism, and Interfaces 16

Initialization method public class Rectangle extends ClosedShape { private int imywidth; private int imyheight; public Rectangle() { init(0, 0); public Rectangle(int width, int height) { init(width, height); public Rectangle(int width, int height, int x, int y) { super(x, y); init(width, height); private void init(int width, int height) { imywidth = width; imyheight = height; Inheritance, Polymorphism, and Interfaces 17

Overriding methods 8any method that is not final may be overridden by a descendant class overriding is a replacement of a behavior overloading is the addition of a behavior 8same signature as method in ancestor 8may not reduce visibility 8may use the original method if simply want to add more behavior to existing also called partial overriding 8The Rectangle class adds data, partially overrides tostring Inheritance, Polymorphism, and Interfaces 18

The Keyword super 8super is used to access something (any protected or public field or method) from the super class that has been overridden 8Rectangle's tostring makes use of the tostring in ClosedShape my calling super.tostring() 8without the super calling tostring would result in infinite recursive calls 8Java does not allow nested supers super.super.tostring() results in a syntax error even though technically this refers to a valid method, Object's tostring 8Rectangle partially overrides ClosedShape's tostring Inheritance, Polymorphism, and Interfaces 19

What Can Rectangles Do? Rectangle r1 = new Rectangle(); Rectangle r2 = new Rectangle(10, 15); Rectangle r3 = new Rectangle(10, 15, 2, 3); System.out.println( r1 ); System.out.println( r2 ); System.out.println( r3 ); int a = r1.getx() + r1.gety(); ClosedShape s = new Rectangle(5, 10, 3, 4); System.out.println( s.tostring() ); a += s.getx(); ClosedShape[] slist = new ClosedShape[3]; slist[0] = new ClosedShape(5, 10); slist[1] = new Rectangle(10, 25, 10, 7); slist[2] = r2; for(int i = 0; i < slist.length; i++) System.out.println( slist[i].tostring() ); Inheritance, Polymorphism, and Interfaces 20

The role of final in Inheritance 8A class may be declared as final that class may not be extended 8A method in a class may be declared as final that method may not be overridden guarantees behavior in all descendants can speed up a program by allowing static binding (binding or determination at compile time what code will actually be executed) Inheritance, Polymorphism, and Interfaces 21

Abstract Classes and Methods 8An abstract class is used to define a class to gather together behaviors but: an object of that type never exists and can never be created or instantiated. a Shape or a Mammal 8a method may be declared abstract in its header, after visibility modifier no body to the method all derived classes must eventually implement this method (or they must be abstract as well) any class with 1 or more abstract methods must be an abstract class Inheritance, Polymorphism, and Interfaces 22

An Abstract ClosedShape Class public abstract class ClosedShape { private int imyx; private int imyy; public ClosedShape() { this(0,0); public ClosedShape (int x, int y) { imyx = x; imyy = y; public String tostring() { return "x: " + imyx + " y: " + imyy; public abstract int getarea(); public int getx(){ return imyx; public int gety(){ return imyy; Inheritance, Polymorphism, and Interfaces 23

Classes that Inherit from ClosedShape 8Rectangle inherits from ClosedShape 8What if Rectangle is unchanged 8Problem: If I have a Rectangle object what happens when I call: Rectangle r = new Rectangle(10, 5, 0, 0); System.out.println( r.getarea(); ) 8Undefined behavior = BAD 8As is the Rectangle class would not compile 8If a class inherits from an abstract class that has abstract methods those methods must be defined in the child or the child must be abstract as well Inheritance, Polymorphism, and Interfaces 24

Implementing getarea() public class Rectangle extends ClosedShape { private int imywidth; private int imyheight; public int getarea() { return imywidth * imyheight; // other methods not shown public class Square extends Rectangle { public Square() { public Square(int side) { super(side, side); public Square(int side, int x, int y) { super(side, side, x, y); Inheritance, Polymorphism, and Interfaces 25

A Circle Class public class Circle extends ClosedShape { int imyradius; public Circle() { this(1); public Circle(int radius) { imyradius = radius; public Circle(int radius, int x, int y) { super(x,y); imyradius = radius; public int getarea() { return Math.PI * imyradius * imyradius; public String tostring() { return super.tostring() + " radius: " + imyradius; Inheritance, Polymorphism, and Interfaces 26

Polymorphism in Action public class UsesShapes { public static void go() { ClosedShape[] slist = new ClosedShape[10]; int a, b, c, d; int x; for(int i = 0; i < 10; i++) { a = (int)(math.random() * 100); b = (int)(math.random() * 100); c = (int)(math.random() * 100); d = (int)(math.random() * 100); x = (int)(math.random() * 3 ); if( x == 0 ) slist[i] = new Rectangle(a,b,c,d); else if(x == 1) slist[i] = new Square(a,c,d); else slist[i] = new Circle(a,c,d); int total =0; for(int i = 0; i < 10; i++) { total += slist[i].getarea(); System.out.println( slist[i] ); Inheritance, Polymorphism, and Interfaces 27

The Kicker 8We want to expand our pallet of shapes 8Triangle could also be a sub class of ClosedShape. it would inherit from ClosedShape public int getarea() { return 0.5 * imywidth * imyheight; 8What changes do we have to make to the code on the previous slide for totaling area so it will now handle Triangles as well? 8Power. Inheritance, Polymorphism, and Interfaces 28

Genericity 8One of the goals of OOP is the support of code reuse to allow more efficient program development 8If a algorithm is essentially the same, but the code would vary based on the data type genericity allows only a single version of that code to exist some languages support genericity via templates in Java, Polymorphism and the inheritance requirement along with interfaces are used the remove duplicates example Inheritance, Polymorphism, and Interfaces 29

/* pre: list!= null, for all n such that 0 <= n < list.length, list[n]!= null post: return an array of Objects with all duplicates in list removed, i.e. each element in returned array is unique */ public static Object[] removedups(object[] list) { int numunique = 0; Object[] temp = new Object[list.length]; boolean unique; int index; for(int i = 0; i < list.length; i++) { unique = true; index = 0; while(unique && index < numunique) { unique = list[i].equals( temp[index] ); index++; if(unique) { temp[numunique] = list[i]; numunique++; Object[] result = new Object[numUnique]; System.arraycopy(temp, 0, result, 0, numunique); Inheritance, Polymorphism, and Interfaces 30

Object Variables Rectangle r = new Rectangle(10, 20); ClosedShape s = r; System.out.println("Area is " + s.getarea()); 8The above code works if Rectangle extends ClosedShape 8An object variable may point to an object of its base type or a descendant in the inheritance chain The is-a relationship is met. A Rectangle object is-a shape so s may point to it 8This is a form of polymorphism and is used extensively in the Java Collection classes Vector, ArrayList are lists of Objects Inheritance, Polymorphism, and Interfaces 31

Type Compatibility Rectangle r = new Rectangle(5, 10); ClosedShape s = r; s.changewidth(20); // syntax error 8polymorphism allows s to point at a Rect object but there are limitations 8The above code will not compile 8Statically, s is declared to be a shape no changewidth method in Shape class must cast s to a Rectangle Rectangle r = new Rectangle(5, 10); Shape s = r; ((Rectangle)s).changeWidth(20); //Okay Inheritance, Polymorphism, and Interfaces 32

Problems with Casting 8The following code compiles but a Class Cast Exception is thrown at runtime Rectangle r = new Rectangle(5, 10); Circle c = new Circle(5); Shape s = c; ((Rectangle)s).changeWidth(4); 8Casting must be done carefully and correctly 8If unsure of what type object will be the use the instanceof operator or the getclass() method expression instanceof ClassName Inheritance, Polymorphism, and Interfaces 33

Multiple Inheritance 8Inheritance models the "is-a" relationship between real world things 8one of the benefits is code reuse, completing programs faster, with less effort 8in the real world a thing can have "is-a" relationships with several other things a Graduate Teaching Assistant is-a Graduate Student. Graduate Teaching Assistant is-a Faculty Member a Student is-a Person. a Student is a SortableObject Inheritance, Polymorphism, and Interfaces 34

The Power of Polymorphism 8Polymorphism allows collections, such as ArrayList, to hold anything genericity, C++ achieves via templates 8Polymorphism also allows a method to work on multiple types create a sorting method that accepts arrays of SortableObjects it can sort anything again, C++ has templated functions 8Java uses a limited form of multiple inheritance Inheritance, Polymorphism, and Interfaces 35

Interfaces 8A Java interface is a "pure abstract class". Design only, no implementation. 8Interfaces are declared in a way similar to classes but consist only of public abstract methods public final static fields 8A Java class extends exactly one other class, but can implement as many interfaces as desired Inheritance, Polymorphism, and Interfaces 36

Common Interfaces in Java 8One of the most interesting interfaces is: Comparable package java.lang public interface Comparable { public int compareto( Object other ); 8compareTo should return an int <0 if the calling object is less than the parameter, 0 if they are equal, and an int >0 if the calling object is greater than the parameter Inheritance, Polymorphism, and Interfaces 37

Implementing an Interface public class Card implements Comparable { public int compareto(object otherobject) { Card other = (Card)otherObject; int result = imysuit - other.imysuit; if(result == 0) result = imyvalue - other.imyvalue; // other methods not shown 8unlike the equals method no steps to prevent a miscast 8If a class declares that it will implement an interface, but does not provide an implementation of all the methods in that interface, that class must be abstract Inheritance, Polymorphism, and Interfaces 38

Polymorphism Again public static SelectionSort(Comparable[] list) { Comparable temp; int small; for(int i = 0; i < list.length - 1; i++) { small = i; for(int j = i + 1; j < list.length; j++) { if( list[j].compareto(list[small]) < 0) small = j; // end of j loop temp = list[i]; list[i] = list[small]; list[small] = temp; // end of i loop Inheritance, Polymorphism, and Interfaces 39