Inheritance.

Slides:



Advertisements
Similar presentations
Introduction to Java 2 Programming
Advertisements

Inheritance. Inheritance  New class (derived class) is created from another class (base class).  Ex. EmployeeEmployee  HourlyEmployee  SalariedEmployee.
CMSC 202 Inheritance. Aug 6, Object Relationships An object can have another object as one of instance variables. The Person class had two Date.
Java Inheritance. What is inherited A subclass inherits variables and methods from its superclass and all of its ancestors. The subclass can use these.
1 CS 171: Introduction to Computer Science II Review: OO, Inheritance, and Libraries Ymir Vigfusson.
Chapter 7 Inheritance Slides prepared by Rose Williams, Binghamton University Copyright © 2008 Pearson Addison-Wesley. All rights reserved.
Slides prepared by Rose Williams, Binghamton University Chapter 7 Inheritance.
Slides prepared by Rose Williams, Binghamton University Chapter 7 Inheritance.
CS102--Object Oriented Programming Lecture 7: – Inheritance Copyright © 2008 Xiaoyan Li.
Slides prepared by Rose Williams, Binghamton University Chapter 7 Inheritance.
CS102--Object Oriented Programming Lecture 8: – More about Inheritance When to use inheritance Relationship between classes Rules to follow Copyright ©
Chapter 7 Inheritance Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
1 Inheritance and Polymorphism. 2 Motivations Suppose you will define classes to model circles, rectangles, and triangles. These classes have many common.
Polymorphism. Lecture Objectives To understand the concept of polymorphism To understand the concept of static or early binding To understand the concept.
Inheritance Part II. Lecture Objectives To learn about inheritance To understand how to inherit and override superclass methods To be able to invoke superclass.
Inheritance One of the biggest advantages of object-oriented design is that of inheritance. A class may be derived from another class, the base class.
RIT Computer Science Dept. Goals l Inheritance l Modifiers: private, public, protected l Polymorphism.
Polymorphism. 3 main programming mechanisms that constitute OOP: 1. Encapsulation 2. Inheritance 3. Polymorphism.
Inheritance (Part 4) Polymorphism and Abstract Classes 1.
Inheritance (Part 2) KomondorBloodHound PureBreedMix Dog Object.
CSC 1601 Exam 1 Review. Topics  javadoc  Advanced Java I/O  Objects  References  Static variables and methods  Wrapper classes  Class parameters.
1 COSC2007 Data Structures II Chapter 9 Class Relationships.
Application development with Java Lecture 21. Inheritance Subclasses Overriding Object class.
COMP Inheritance Basics Yi Hong June 09, 2015.
1 Object-Oriented Programming Inheritance. 2 Superclasses and Subclasses Superclasses and Subclasses  Superclasses and subclasses Object of one class.
Inheritance ndex.html ndex.htmland “Java.
OOP in Java : © W. Milner 2005 : Slide 1 Java and OOP Part 3 – Extending classes.
Liang, Introduction to Java Programming, Seventh Edition, (c) 2009 Pearson Education, Inc. All rights reserved Chapter 10 Inheritance and Polymorphism.
COMP Inheritance and Polymorphism Yi Hong June 09, 2015.
CMSC 202 Polymorphism 2 nd Lecture. Aug 6, Topics Constructors and polymorphism The clone method Abstract methods Abstract classes.
Data Structures and Algorithms revision
Polymorphism 2nd Lecture
Lecture 12 Inheritance.
Object-oriented Programming in Java
Overriding Method.
Chapter 11 Inheritance and Polymorphism
Inheritance and Polymorphism
Polymorphism 2nd Lecture
Polymorphism 2nd Lecture
Java Inheritance.
Lecture 17: Polymorphism (Part II)
An Introduction to Inheritance
Inheritance Chapter 7 Inheritance Basics Programming with Inheritance
Computer Science II Exam 1 Review.
Abstract Classes.
Overloading and Constructors
Chapter 9 Inheritance and Polymorphism
Inheritance 2nd Lecture
Chapter 7 Inheritance Slides prepared by Rose Williams, Binghamton University Kenrick Mock, University of Alaska Anchorage.
The super Reference Constructors cannot be used in child classes, even though they have public visibility Yet we often want to use the parent's constructor.
Polymorphism 2nd Lecture
Comp 249 Programming Methodology
Inheritance I Class Reuse with Inheritance
Comp 249 Programming Methodology
Inheritance 2nd Lecture
CMSC 202 Inheritance.
Class Reuse with Inheritance
Announcements Lab 8 Was Due Today Lab 7 Regrade Due Thursday
Inheritance 2nd Lecture
Inheritance Chapter 7 Inheritance Basics Programming with Inheritance
Polymorphism.
Lecture 18: Polymorphism (Part II)
Object class.
Chapter 11 Inheritance and Polymorphism Part 1
Announcements Assignment 4 Due Today Lab 8 Due Wednesday
Chapter 11 Inheritance and Encapsulation and Polymorphism
CMSC 202 Inheritance II.
Topics OOP Review Inheritance Review Abstract Classes
Chapter 7 Inheritance.
CS 240 – Advanced Programming Concepts
Presentation transcript:

Inheritance

Inheritance New class (derived class) is created from another class (base class).

Inheritance New class (derived class) is created from another class (base class). Ex. Employee HourlyEmployee SalariedEmployee

Inheritance New class (derived class) is created from another class (base class). Ex. Employee HourlyEmployee SalariedEmployee Some things like name and hireDate are common to all employees. Belong in a base class What else can you imagine belongs in the base class?

Inheritance Employee HourlyEmployee SalariedEmployee Some things are relevant to only a salaried employee or an hourly employee. Can you think of anything?

Employee public class Employee { private String mName; private Date mHireDate; public Employee ( ) { … } public Employee ( String name, Date date ) { … } public Employee ( Employee original ) { … } public String getName ( ) { … } public Date getHireDate ( ) { … } public void setName ( String name ) { … } public void setHireDate ( Date date ) { … } public String toString ( ) { … } public boolean equals ( Employee other ) { … } } What are these called?

Employee public class Employee { private String mName; private Date mHireDate; public Employee ( ) { … } public Employee ( String name, Date date ) { … } public Employee ( Employee original ) { … } public String getName ( ) { … } public Date getHireDate ( ) { … } public void setName ( String name ) { … } public void setHireDate ( Date date ) { … } public String toString ( ) { … } public boolean equals ( Employee other ) { … } } What are these called?

Employee public class Employee { private String mName; private Date mHireDate; public Employee ( ) { … } public Employee ( String name, Date date ) { … } public Employee ( Employee original ) { … } public String getName ( ) { … } public Date getHireDate ( ) { … } public void setName ( String name ) { … } public void setHireDate ( Date date ) { … } public String toString ( ) { … } public boolean equals ( Employee other ) { … } } What are these called?

Employee public class Employee { private String mName; private Date mHireDate; public Employee ( ) { … } public Employee ( String name, Date date ) { … } public Employee ( Employee original ) { … } public String getName ( ) { … } public Date getHireDate ( ) { … } public void setName ( String name ) { … } public void setHireDate ( Date date ) { … } public String toString ( ) { … } public boolean equals ( Employee other ) { … } } What are these called?

Employee public class Employee { private String mName; private Date mHireDate; public Employee ( ) { … } public Employee ( String name, Date date ) { … } public Employee ( Employee original ) { … } public String getName ( ) { … } public Date getHireDate ( ) { … } public void setName ( String name ) { … } public void setHireDate ( Date date ) { … } public String toString ( ) { … } public boolean equals ( Employee other ) { … } } The usual stuff!

Inheritance syntax public class DerivedClassName extends BaseClassName { DeclarationsOfAddedStaticVariables DeclarationsOfAddedInstanceVariables DefinitionsOfAddedAndOverriddenMethods }

Inheritance steps Define base class (e.g., Employee) Define derived class public class HourlyEmployee extends Employee { … }

Inheritance Base class = parent class = ancestor = superclass

Inheritance Base class = parent class = ancestor = superclass Derived class = child class = descendent = subclass

Inheritance Base class = parent class = ancestor = superclass Derived class = child class = descendent = subclass Public and protected attributes and methods in the base class are available to (inherited by) the derived class.

Overriding methods Say our HourlyEmployee class adds an hourlyRate attribute. Say the base class has toString and equals methods. The derived class inherits these but they aren’t 100% sufficient for the derived class. What do we do?

Overriding methods What do we do? Reimplement the equals and toString methods in the derived class. These reimplemented methods override the methods in the base class.

Overriding methods Note: What does the keyword final mean when used with instance variables? What does the keyword final mean when used with methods? What does the keyword final mean when used with the class definition? How does overriding differ from overloading?

Covariant return type In general, one cannot override a method and change the return type. Exception: (Java 5 or greater) If the return type is a class type, it can be changed to a descendent type of the original class type.

Public and private Derived class can “loosen” access restrictions. Derived class can change private to public.

Public and private Derived class can “loosen” access restrictions. Derived class can change private to public. Derived class can’t “tighten” them. Derived class can’t change public to private.

Super ctor Subclass ctor may call superclass ctor. Ex. super( a, b, … ); Number of args may differ Call to super() must be first line in subclass ctor.

Super ctor Subclass ctor may call superclass ctor. Ex. super( a, b, … ); Number of args may differ Call to super() must be first line in subclass ctor. If derived class doesn’t call a base class ctor, then the no-arg ctor of the base class is automatically invoked (first). How can we demonstrate this?

Super ctor Subclass ctor may call superclass ctor. Ex. super( a, b, … ); Number of args may differ Call to super() must be first line in subclass ctor. If derived class doesn’t call a base class ctor, then the no-arg ctor of the base class is automatically invoked (first). How can we demonstrate this? Typically, a base class ctor should always be called.

Super ctor If derived class doesn’t call a base class ctor, then the no-arg ctor of the base class is automatically invoked (first). How can we demonstrate this?

Super ctor If derived class doesn’t call a base class ctor, then the no-arg ctor of the base class is automatically invoked (first). How can we demonstrate this? public class Tester7Superclass { public Tester7Superclass ( ) { System.out.println( "Tester7Superclass() says hello." ); } public class Tester7 extends Tester7Superclass { public Tester7 ( String s ) { System.out.println( "Tester7() says hello." ); public static void main ( String p[] ) { new Tester7( "fred" ); No base class ctor is explicitly called. Yet . . . Test output: Tester7Superclass() says hello. Tester7() says hello.

Super ctor How can we make sure that this can’t happen (that the no-arg ctor can’t be called by the subclass)? public class Tester7Superclass { private Tester7Superclass ( ) { System.out.println( "Tester7Superclass() says hello." ); } public class Tester7 extends Tester7Superclass { public Tester7 ( String s ) { System.out.println( "Tester7() says hello." ); public static void main ( String p[] ) { new Tester7( "fred" );

Super ctor How can we make sure that this can’t happen (that the no-arg ctor can’t be called by the subclass)? public class Tester7Superclass { private Tester7Superclass ( ) { System.out.println( "Tester7Superclass() says hello." ); } public class Tester7 extends Tester7Superclass { public Tester7 ( String s ) { System.out.println( "Tester7() says hello." ); public static void main ( String p[] ) { new Tester7( "fred" ); Now, this won’t even compile (because this ctor attempts to invoke the superclass ctor which is now private)! (The superclass must provide us with a non-private ctor that we can use, or we are sunk.)

The this ctor We can use the this ctor to call another ctor in the same class. Must call the this ctor first. Can’t use both the this ctor and super. Ex. public HourlyEmployee ( ) { this( “no name”, new Date(“January”, 1, 1000), 0, 0 ); }

Types An object of a derived class has more than one type. Not only its type but also the type of every one of its ancestors (all the way back to Object). Object is the base class for classes that don’t extend anything. Object is the ancestor of all classes.

Every Employer is a Person. Every Person is an Object. So every Employer is a Person and an Object.

java.lang.Object Many methods. See http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html.

Types instanceof operator Object instanceof ClassName True if Object is of type ClassName; false otherwise.

Types instanceof operator Object instanceof ClassName True if Object is of type ClassName; false otherwise. Example: Integer i = new Integer(12); Object o = i; //won’t compile (not even possible): //System.out.println( (i instanceof String) ); //OK. Compiles; runs; returns false: System.out.println( (o instanceof String) ); //false System.out.println( (o instanceof Object) ); //true System.out.println( (o instanceof Integer) ); //true

Types instanceof operator Object instanceof ClassName True if Object is of type ClassName; false otherwise. Example: Integer i = new Integer(12); Object o = i; //won’t compile (not even possible): //System.out.println( (i instanceof String) ); //OK. Compiles; runs; returns false: System.out.println( (o instanceof String) ); //false System.out.println( (o instanceof Object) ); //true System.out.println( (o instanceof Integer) ); //true