10-1 inheritance review inheritance, overriding, and polymorphism

57
10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

Upload: gavin-wilkerson

Post on 12-Jan-2016

223 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-1

Inheritance Review

Inheritance, Overriding, and Polymorphism

Page 2: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-2

Topics

•Inheritance• Polymorphism

Page 3: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-3

Class hierarchies

It's common/natural for classes to be related to each other

_______ ANIMAL________ / \ MAMMAL REPTILE / \ / \WHALE DOG SNAKE LIZARD / \ IGUANA SKINK

Page 4: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-4

Subclasses and Superclasses _______ ANIMAL________ / \ MAMMAL REPTILE / \ / \WHALE DOG SNAKE LIZARD / \ IGUANA SKINK

Class hierarchies represent "IS A" (or "is kind of") relationships.

Page 5: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-5

Why Capture these "is a kind of" relationships?

• Better organize related concepts• Reduce duplication through

inheritance

Advantages?

Page 6: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-6

So what is inheritance?

• the key of object-oriented programming.• is the act of sharing state and behaviour from a

more general type of class (i.e. a superclass).• allows code to be shared between classes

(software reusability).• saves time when programming (less code

needs to be written).• encourages reuse of well designed objects (i.e.,

proven and tested code).• helps keep code simple.

Page 7: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-7

A subclass:

• Is a class that does the inheriting by using state (i.e. instance variables) and behaviour (i.e., methods) from some other class.

• Note: it cannot access private methods or instance variables from its superclasses.

Page 8: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-8

A superclass

• Is a class from which its subclasses inherit state and behaviour.

• Is more general that its subclasses.

• Note: subclasses are more specific and "larger".

Page 9: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-9

A direct superclass:

• is the superclass from which the subclass explicitly inherits.

• Example– Mammal is the direct superclass of

Dog _______ ANIMAL________ / \ MAMMAL REPTILE / \ / \WHALE DOG SNAKE LIZARD / \ IGUANA SKINK

Page 10: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-10

Example _______ ANIMAL________ / \ MAMMAL REPTILE / \ / \WHALE DOG SNAKE LIZARD / \ IGUANA SKINKclass Animal {…}

class Mammal extends Animal {…}class Reptile extends Animal {…}class Whale extends Mammal {…}class Dog extends Mammal {…}class Snake extends Reptile {…}class Lizard extends Reptile {…}class Iguana extends Lizard {…}class Skink extends Lizard {…}

Page 11: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-11

Example _______ ANIMAL________ / \ MAMMAL REPTILE / \ / \WHALE DOG SNAKE LIZARD / \ IGUANA SKINKclass Animal {

public int age; public getAge(){ return age};}

class Mammal extends Animal { public float bodyTemperature; public get bodyTemperature{return bodyTemperature}

class Dog extends Mammal { String name;…}

fido.getAge()

Page 12: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-12

Instance Method lookup

• When a message (method) is sent to an instance, Java must look up the method in the class hierarchy.

• If Java does not find the method defined in the class of the receiver, it checks the superclass.

• If not found their either, it checks the superclass of that class and so on ... until the Object class is reached.

• This lookup occurs at runtime (i.e. when the program is executing).

Page 13: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-13

Class Method Inheritance

• For class methods, the look-up occurs at compile time.

• Since an inherited class method is compiled as static (i.e., lookup at compile time) then within that method the object must be treated as an instance of the class that defines the method, not the subclass that inherits it.

Page 14: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-14

How many classes can a class inherit from?

_______ ANIMAL________ / \ MAMMAL PET REPTILE / \ / / \WHALE DOG SNAKE LIZARD / \ IGUANA SKINK

Is a dog both a Mammal and a Pet?

Page 15: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-15

Multiple Inheritance

• is the term given to a class that inherits from more than one direct superclass.

• is NOT supported in Java (but it is in C++ which we will not talk about at all).

• can get some of its advantages through the notion of interfaces.

Page 16: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-16

Exercise

All vehicles have a name, speed, maximum speed, and operator. Passenger vehicles have a maximum passenger capacity and lists of passengers, while cargo vehicles have a maximum load capacity and a current load. Busses have a school district they serve, while planes have a list of airports they serve. Both operators and passengers are people.

Define the basic class structure for this problem in Java and make sure it compiles.

Page 17: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-17

Exercise

All vehicles have a name, speed, maximum speed, and operator. Passenger vehicles have a maximum passenger capacity and lists of passengers, while cargo vehicles have a maximum load capacity and a current load. Busses have a school district they serve, while planes have a list of airports they serve. Both operators and passengers are people.

Define the basic class structure for this problem in Java and make sure it compiles.

Answer: Vehicle.java

Page 18: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-18

Exercise

A university has students, faculty, staff and administrators. Each has a number, name and date of birth. Faculty teach courses that have numbers, names and enrollment. Courses are given in rooms at specific times. Rooms have room numbers and capacities. Faculty and staff and administrators are employees. Employees have social security numbers and levels. Staff are either clerical or technical. Dalhousie, Carleton and Western are universities. All employees get salaries. Faculty have research grants that other employees and staff do not.Define the basic class structure for this problem in Java and make sure it compiles.

Page 19: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-19

Is a class without instances useful?

Human / \Female Male

Should we make instances of Human?

Page 20: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-20

An Abstract Class

• is a class that can never be instantiated (i.e., never have instances).

• always has subclasses• helps to organize a program

Page 21: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-21

A Concrete Class

• is a class that can be instantiated (i.e., can have instances).

Page 22: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-22

More Visibility Modifiers

Others modifiers: public,private,static

Modifier Class Member (variable ormethod)

protected N/ A Accessible within itspackage and subclasses

abstract A top-levelclass, not aninner one

Class member accessedthrough its class name

Final May not besub-classed

A f ield may not bechanged. A method maynot be overridden.

Page 23: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-23

Recall: the other modifiers

Modifier Class Member (variable ormethod)

none Accessible onlywithin itspackage

Accessible only withinits package

public Accessibleanywhere thatits package is

Accessible anywherethat its class packageis

private N/ A Accessible only withinits own class

static A top-levelclass, not aninner one

Class memberaccessed through itsclass name

Page 24: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-24

Modifier Summary

Member Visibility

Accessible to: public protected package private

Same Class yes yes yes yes

Class in samepackage

yes yes yes no

Subclass in

different package

yes yes no no

Non-subclass,different package

yes no no no

Page 25: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-25

Rules of thumb

• Use public only for methods and constants that form part of the API of the class.

• Use protected for fields and methods that aren’t necessary to "use" in the class, but may be of interest to anyone creating a subclass as part of a different package

Page 26: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-26

Rules of thumb

• Use none (ie. The defualt package visability) for fields ant methods that you want hidden outside the package , but which you want cooperating classes within the same package to have access to.

• Use private for fields and methods that are only used inside the class and should be hidden elsewhere.

Page 27: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-27

Examples hierarchies Student GraduateStudent UndergraduateStudent

Shape Circle Triangle Rectangle Square

Loan CarLoan HomeImprovemantLoan MortgageLoan

Account CheckingAccount SavingsAccount

Which should be abstract?Which concrete?

Page 28: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-28

Are they right?

• How do we know what subclasses to use ?

• What about a cube or a sphere or even a tetrahedron ?

Shape Circle Triangle Rectangle Square

Page 29: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-29

A better shape hierarchy?

• Perhaps more abstract classes would help?

• What else should we add?

Shape TwoDimensionalShape Circle Triangle Rectangle Square ThreeDimensionalShape Sphere Cube Tetrahedron

Page 30: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-30

More extensive yet

• What should be abstract?

Shape TwoDimensionalShape Ellipse Circle Polygon Triangle Rectangle Square ThreeDimensionalShape Sphere Polyhedron Cube Tetrahedron

Page 31: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-31

Can we enforce the idea of an abstract class?

• Yes, just use the abstract keyword:• Syntax:

public abstract class TheSubclassName extends TheSuperclassName{ ... }

Page 32: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-32

Every object inherits from something!!!

• When we do not write the extends portion of the declaration, Java automatically makes the class a subclass of Object

• Object is the most general class (as everything inherits from).

Page 33: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-33

Dogs bark, Terriers yap

Mammal

Dog

Terrier

May need to overrideThe definition of a method!!

max

fido

Page 34: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-34

Overriding

• is used when a method belonging to a superclass is not needed or is inappropriate

• allows the re-writing of the method for use in the subclass only

• the subclass own method with the same name (and same parameter list) that does something else (perhaps nothing).

Page 35: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-35

Person (name, phone#, address) Employee (employee#, workPhone#) Professor (courses, office #) Secretary (workload, schedule) Student (student#, courses, gpa) FullTimeStudent (major) PartTimeStudent (workPhone#)

Example

Page 36: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-36

Class Person

public class Person { protected String name, phoneNumber, address; /* Place code for methods here */ } public class Employee extends Person { protected int employeeNumber; protected String workPhoneNumber; /* Place code for methods here */ } public class Professor extends Employee { protected Vector courses; protected String officeNumber; /* Place code for methods here */ } public class Secretary extends Employee { protected Vector workLoad; protected Hashtable schedule; /* Place code for methods here */ }

Page 37: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-37

Class Person continued

public class Student extends Person { protected int studentNumber; protected Vector courses; protected float gpa; /* Place code for methods here */ } public class FullTimeStudent extends Student { protected String major; /* Place code for methods here */ } public class PartTimeStudent extends Student { protected String workPhoneNumber; /* Place code for methods here */ }

Page 38: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-38

Which class gets what?

• Which classes should implement – getName or getcourses methods?

• What should the toString methods return?

Person (name, phone#, address) Employee (employee#, workPhone#) Professor (courses, office #) Secretary (workload, schedule) Student (student#, courses, gpa)

Page 39: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-39

Possible toString outputPerson NAME: Jim Class ADDRESS: 1445 Porter St. PHONE #: 845-3232

Employee NAME: Rob Banks ADDRESS: 789 ScotiaBank Road. PHONE #: 899-2332 EMPLOYEE #: 88765 WORK #: 555-2433

Professor NAME: Guy Smart EMPLOYEE #: 65445 WORK #: 232-3415 OFFICE #: 5240 PA

Secretary NAME: Earl E. Bird ADDRESS: 12 Knowhere Cres. PHONE #: 443-7854 EMPLOYEE #: 76845 WORK #: 444-3243

Student NAME: May I. Passplease ADDRESS: 5567 Java Drive PHONE #: 732-8923 STUDENT #: 156753

Page 40: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-40

toString for the Person class

//This is the toString method for the Person class public String toString() { return("Person \n" + " NAME: " + getName() + "\n" + " ADDRESS: " + getAddress() + "\n" + " PHONE #: " + getPhoneNumer()); }

Can we do better? Remember this method will be inhetited!!!

Page 41: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-41

A better toString for the Person class

//This is the toString method for the Person class public String toString() { return(this.getClass().getName() + "\n" + " NAME: " + getName() + "\n" + " ADDRESS: " + getAddress() + "\n" + " PHONE #: " + getPhoneNumer()); }

Page 42: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-42

toString for the Employee class

//This is the toString method for the Employee class public String toString() { return(super.toString() + "\n" + " EMPLOYEE #: " + getEmployeeNumber() + "\n" + " WORK #: " + getWorkNumer()); }

Idea: super classes method PLUS!!!

Page 43: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-43

What next?

Person NAME: Jim Class ADDRESS: 1445 Porter St. PHONE #: 845-3232

Employee NAME: Rob Banks ADDRESS: 789 ScotiaBank Road. PHONE #: 899-2332 EMPLOYEE #: 88765 WORK #: 555-2433

Professor NAME: Guy Smart EMPLOYEE #: 65445 WORK #: 232-3415 OFFICE #: 5240 PA

Secretary NAME: Earl E. Bird ADDRESS: 12 Knowhere Cres. PHONE #: 443-7854 EMPLOYEE #: 76845 WORK #: 444-3243

Student NAME: May I. Passplease ADDRESS: 5567 Java Drive PHONE #: 732-8923 STUDENT #: 156753

Person Employee Professor Secretary Student

Page 44: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-44

toString for the Professor class

//This is the toString method for the Professor class public String toString() { return(this.getClass().getName() + "\n" + " NAME: " + getName() + "\n" + " EMPLOYEE #: " + getEmployeeNumber() + "\n" + " WORK #: " + getWorkNumer()); " OFFICE# : " + getOfficeNumber() + "\n"); }

Page 45: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-45

toString for the Student class

• inherits from Person and also displays the student number.

//This is the toString method for the Student class public String toString() { return(super.toString() + "\n" + " STUDENT# : " + getStudentNumber() + "\n"); }

Page 46: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-46

Inheritance with Constructors

• A subclass automatically inherits the constructor of its superclass

• Good programming style: override the superclass constructor

• should explicitly call the superclass constructor at the beginning of code

• If not called explicitly, a superclass constructor is automatically called at the beginning of the subclass constructor

Page 47: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-47

Person constructors

public class Person { protected String name, phoneNumber, address;

public Person() { setName(""); setPhoneNumber(""); setAddress("") } public Person(String aName, String aPhoneNumber, String anAddress) { setName(aName); setPhoneNumber(aPhoneNumber); setAddress(anAddress); } }

Page 48: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-48

Employee Constructors

public class Employee extends Person { protected int employeeNumber; protected String workPhoneNumber;

public Employee() { //There is an implicit call to the Person() constructor here setEmployeeNumber(0); setWorkPhoneNumber(""); }

public Employee(int aNumber, String aPhoneNumber) { //There is an implicit call to the Person() constructor here setEmployeeNumber(aNumber); setWorkPhoneNumber(aPhoneNumber); } }

Page 49: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-49

Professor Constructors

public class Professor extends Employee { protected Vector courses; protected String officeNumber;

public Professor() { super(); courses = new Vector(); setOfficeNumber(""); }

public Professor(int aNumber, String aPhoneNumber, String anOfficeNumber) { super(aNumber, aPhoneNumber); courses = new Vector(); setOfficeNumber(anOfficeNumber); } }

Page 50: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-50

Final

• When a method is declared as final, it is not allowed to be overridden by a subclass.

• If a class is declared final, it cannot have subclasses.

Page 51: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-51

Relationship Between Superclass and Subclass

Objects• An object of a subclass can be treated

as an object of its corresponding superclass.

• For instance, a Professor can be treated as an employee under certain circumstances (i.e., administration purposes).

Can we treat an Employee object as a Professor object?

Page 52: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-52

Only in special cases!

• No, in general, an Employee does not have the state or behaviour of a Professor unless the Employee is actually a Professor object.

• In this case, we can use a type cast to instruct Java that the object will now be treated as a Professor.

Page 53: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-53

Exercise

• Complete this class structure• See Person.java

Person (name, phone#, address) Employee (employee#, workPhone#) Professor (courses, office #) Secretary (workload, schedule) Student (student#, courses, gpa) FullTimeStudent (major) PartTimeStudent (workPhone#)

Page 54: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-54

Topics

• Inheritance

•Polymorphism

Page 55: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-55

Problem: Given a shape Draw it.

• Too many different methods

• Too much testing

Shape Circle Triangle Rectangle

aString = aShape.getClass().getName()); if (aString.equals("Circle")) aShape.drawCircle(); if (aString.equals("Triangle")) aShape.drawTriangle(); if (aString.equals("Rectangle")) aShape.drawRectangle();

Page 56: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-56

Polymorphism

• Having the same method name (and signature) for different methods of multiple classes

• Examples we have seen:– toString()– size()– isEmpty()

Page 57: 10-1 Inheritance Review Inheritance, Overriding, and Polymorphism

10-57

A note on polymorphism

• If a method is inherited, it does not mean that polymorphism is "in play".

• In fact, this is NOT an example of polymorphism.

• In order to have polymorphism, there must be more than one method with the same name and signature.

• An inherited method is NOT a different method.