Inheritance and Class Hierarchies Chapter 3. Chapter Objectives  To understand inheritance and how it facilitates code reuse  To understand how Java.

Slides:



Advertisements
Similar presentations
OOP: Inheritance By: Lamiaa Said.
Advertisements

1 Chapter 6: Extending classes and Inheritance. 2 Basics of Inheritance One of the basic objectives of Inheritance is code reuse If you want to extend.
CS 211 Inheritance AAA.
CS 106 Introduction to Computer Science I 04 / 11 / 2008 Instructor: Michael Eckmann.
Inheritance Inheritance Reserved word protected Reserved word super
Inheritance Java permits you to use your user defined classes to create programs using inheritance.
(C) 2010 Pearson Education, Inc. All rights reserved. Java™ How to Program, 8/e.
ITEC200 – Week03 Inheritance and Class Hierarchies.
Programming with Java © 2002 The McGraw-Hill Companies, Inc. All rights reserved. 1 Chapter 12 More OOP, Interfaces, and Inner Classes.
Inheritance and Class Hierarchies Chapter 3. Chapter 3: Inheritance and Class Hierarchies2 Chapter Objectives To understand inheritance and how it facilitates.
Fall 2007CS 2251 Inheritance and Class Hierarchies Chapter 3.
CS 106 Introduction to Computer Science I 04 / 16 / 2010 Instructor: Michael Eckmann.
Fall 2007CS 2251 Inheritance and Class Hierarchies Chapter 3.
Inheritance and Class Hierarchies Chapter 3 Chapter 3: Inheritance and Class Hierarchies2 Chapter Objectives To understand inheritance and how it facilitates.
1 Chapter 6 Inheritance, Interfaces, and Abstract Classes.
Aalborg Media Lab 23-Jun-15 Inheritance Lecture 10 Chapter 8.
Chapter 10 Classes Continued
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter N - 1 Chapter 13 Polymorphism is-a relationships Interfaces.
© 2006 Pearson Addison-Wesley. All rights reserved9 A-1 Chapter 9 Advanced Java Topics CS102 Sections 51 and 52 Marc Smith and Jim Ten Eyck Spring 2007.
Chapter 11: Inheritance and Polymorphism Java Programming: Program Design Including Data Structures Program Design Including Data Structures.
Chapter 6 Class Inheritance F Superclasses and Subclasses F Keywords: super F Overriding methods F The Object Class F Modifiers: protected, final and abstract.
C++ Object Oriented 1. Class and Object The main purpose of C++ programming is to add object orientation to the C programming language and classes are.
Lecture 8 Inheritance Richard Gesick. 2 OBJECTIVES How inheritance promotes software reusability. The concepts of base classes and derived classes. To.
CISC6795: Spring Object-Oriented Programming: Polymorphism.
INHERITANCE, POLYMORPHISM, CLASS HIERARCHIES AND GENERICS.
Inheritance and Class Hierarchies Ellen Walker CPSC 201 Data Structures Hiram College.
Programming in Java Unit 2. Class and variable declaration A class is best thought of as a template from which objects are created. You can create many.
Predefined Classes in Java Ellen Walker CPSC 201 Data Structures Hiram College.
Inheritance in the Java programming language J. W. Rider.
Lists and the Collection Interface Review inheritance & collections.
More on Hierarchies 1. When an object of a subclass is instantiated, is memory allocated for only the data members of the subclass or also for the members.
JAVA: An Introduction to Problem Solving & Programming, 5 th Ed. By Walter Savitch and Frank Carrano. ISBN © 2008 Pearson Education, Inc., Upper.
Chapter 3 Inheritance and Polymorphism Goals: 1.Superclasses and subclasses 2.Inheritance Hierarchy 3.Polymorphism 4.Type Compatibility 5.Abstract Classes.
Programming in Java CSCI-2220 Object Oriented Programming.
Summing Up Object Oriented Design. Four Major Components: Abstraction modeling real-life entities by essential information only Encapsulation clustering.
Chapter 14 Abstract Classes and Interfaces. Abstract Classes An abstract class extracts common features and functionality of a family of objects An abstract.
8. Inheritance “Is-a” Relationship. Topics Creating Subclasses Overriding Methods Class Hierarchies Abstract Class Inheritance and GUIs The Timer Class.
Inheritance. Inheritance is a fundamental object-oriented design technique used to create and organize reusable classes Chapter 8 focuses on: deriving.
Inheritance and Access Control CS 162 (Summer 2009)
Introduction to Java Chapter 7 - Classes & Object-oriented Programming1 Chapter 7 Classes and Object-Oriented Programming.
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…..
Chapter 8 Inheritance. 2  Review of class relationships  Uses – One class uses the services of another class, either by making objects of that class.
1 The finalize, clone, and getClass Methods  The finalize method is invoked by the garbage collector on an object when the object becomes garbage.  The.
Object Oriented Programming
Chapter 10: Introduction to Inheritance. Objectives Learn about the concept of inheritance Extend classes Override superclass methods Call constructors.
1 COSC2007 Data Structures II Chapter 9 Class Relationships.
 In the java programming language, a keyword is one of 50 reserved words which have a predefined meaning in the language; because of this,
Coming up: Inheritance
1 Inheritance Reserved word protected Reserved word super Overriding methods Class Hierarchies Reading for this lecture: L&L 9.1 – 9.4.
Inheritance and Class Hierarchies Chapter 3. Chapter 3: Inheritance and Class Hierarchies2 Chapter Objectives To understand inheritance and how it facilitates.
Chapter 11: Advanced Inheritance Concepts. Objectives Create and use abstract classes Use dynamic method binding Create arrays of subclass objects Use.
Quick Review of OOP Constructs Classes:  Data types for structured data and behavior  fields and methods Objects:  Variables whose data type is a class.
(c) University of Washington06-1 CSC 143 Java Inheritance Tidbits.
Java Software Solutions Lewis and Loftus Chapter 8 Copyright 1997 by John Lewis and William Loftus. All rights reserved. 1 Inheritance -- Introduction.
Inheritance ndex.html ndex.htmland “Java.
Terms and Rules II Professor Evan Korth New York University (All rights reserved)
1 Inheritance One of the goals of object oriented programming is code reuse. Inheritance is one mechanism for accomplishing code reuse. It allows us to.
Geoff Holmes and Bernhard Pfahringer COMP206-08S General Programming 2.
Inheritance a subclass extends the functionality of a superclass a subclass inherits all the functionality of a superclass don't reinvent the wheel – "stand.
Java Programming: Guided Learning with Early Objects Chapter 9 Inheritance and Polymorphism.
Class Inheritance Part II: Overriding and Polymorphism Corresponds with Chapter 10.
Modern Programming Tools And Techniques-I
OOP: Encapsulation &Abstraction
Objects as a programming concept
Inheritance and Polymorphism
Data Structures and Algorithms
Extending Classes.
Lecture 22 Inheritance Richard Gesick.
Presentation transcript:

Inheritance and Class Hierarchies Chapter 3

Chapter Objectives  To understand inheritance and how it facilitates code reuse  To understand how Java determines which method to execute when there are multiple methods with the same name in a class hierarchy  To learn how to define and use abstract classes as base classes in a hierarchy  To study class Object and its methods and to learn how to override them  To learn how to “clone” an object and to understand the difference between a true clone (deep copy) and a shallow copy  To understand inheritance and how it facilitates code reuse  To understand how Java determines which method to execute when there are multiple methods with the same name in a class hierarchy  To learn how to define and use abstract classes as base classes in a hierarchy  To study class Object and its methods and to learn how to override them  To learn how to “clone” an object and to understand the difference between a true clone (deep copy) and a shallow copy

Chapter Objectives (continued)  To understand why Java does not implement multiple inheritance and to see how you can gain some of the advantages of multiple inheritance through interfaces and delegation  To become familiar with a class hierarchy for drawable shapes  To be introduced to an object factory and to learn how to use it  To understand how to create packages and to learn more about visibility  To understand why Java does not implement multiple inheritance and to see how you can gain some of the advantages of multiple inheritance through interfaces and delegation  To become familiar with a class hierarchy for drawable shapes  To be introduced to an object factory and to learn how to use it  To understand how to create packages and to learn more about visibility

Introduction to Inheritance and Class Hierarchies  Popularity of OOP is that it enables programmers to reuse previously written code saved as classes  All Java classes are arranged in a hierarchy, starting with Object, which is the superclass of all Java classes  Inheritance in OOP is analogous to inheritance in humans  Inheritance and hierarchical organization allow you to capture the idea that one thing may be a refinement or extension of another  Popularity of OOP is that it enables programmers to reuse previously written code saved as classes  All Java classes are arranged in a hierarchy, starting with Object, which is the superclass of all Java classes  Inheritance in OOP is analogous to inheritance in humans  Inheritance and hierarchical organization allow you to capture the idea that one thing may be a refinement or extension of another

Is-a Versus Has-a Relationships  One misuse of inheritance is confusing the has-a relationship with the is-a relationship  The has-a relationship means that one class has the second class as an attribute  We can combine is-a and has-a relationships  The keyword extends specifies that one class is a subclass of another  One misuse of inheritance is confusing the has-a relationship with the is-a relationship  The has-a relationship means that one class has the second class as an attribute  We can combine is-a and has-a relationships  The keyword extends specifies that one class is a subclass of another

A Superclass and a Subclass  Consider two classes: Computer and Laptop  A laptop is a kind of computer and is therefore a subclass of computer  Consider two classes: Computer and Laptop  A laptop is a kind of computer and is therefore a subclass of computer

Initializing Data Fields in a Subclass and the No-Parameter Constructor  Private data fields belonging to a base class must be initialized by invoking the base class’s constructor with the appropriate parameters  If the execution of any constructor in a subclass does not invoke a superclass constructor, Java automatically invokes the no-parameter constructor for the superclass  Initializes that part of the object inherited from the superclass before the subclass starts to initialize its part of the object  Private data fields belonging to a base class must be initialized by invoking the base class’s constructor with the appropriate parameters  If the execution of any constructor in a subclass does not invoke a superclass constructor, Java automatically invokes the no-parameter constructor for the superclass  Initializes that part of the object inherited from the superclass before the subclass starts to initialize its part of the object

Protected Visibility for Superclass Data Fields  Private data fields are not accessible to derived classes  Protected visibility allows data fields to be accessed either by the class defining it or any subclass  In general, it is better to use private visibility because subclasses may be written by different programmers and it is always good practice to restrict and control access to the superclass data fields  Private data fields are not accessible to derived classes  Protected visibility allows data fields to be accessed either by the class defining it or any subclass  In general, it is better to use private visibility because subclasses may be written by different programmers and it is always good practice to restrict and control access to the superclass data fields

Method Overriding  If a derived class has a method found within its base class, that method will override the base class’s method  The keyword super can be used to gain access to superclass methods overridden by the base class  A subclass method must have the same return type as the corresponding superclass method  If a derived class has a method found within its base class, that method will override the base class’s method  The keyword super can be used to gain access to superclass methods overridden by the base class  A subclass method must have the same return type as the corresponding superclass method

Method Overloading  Method overloading: having multiple methods with the same name but different signatures in a class  Constructors are often overloaded  Example:  MyClass(int inputA, int inputB)  MyClass(int inputA, int inputB, double inputC)  Method overloading: having multiple methods with the same name but different signatures in a class  Constructors are often overloaded  Example:  MyClass(int inputA, int inputB)  MyClass(int inputA, int inputB, double inputC)

Polymorphism  A variable of a superclass type can reference an object of a subclass type  Polymorphism means many forms or many shapes  Polymorphism allows the JVM to determine which method to invoke at run time  At compile time, the Java compiler can’t determine what type of object a superclass may reference but it is known at run time  A variable of a superclass type can reference an object of a subclass type  Polymorphism means many forms or many shapes  Polymorphism allows the JVM to determine which method to invoke at run time  At compile time, the Java compiler can’t determine what type of object a superclass may reference but it is known at run time

Abstract Classes, Assignment, and Casting in a Hierarchy  An interface can declare methods but does not provide an implementation of those methods  Methods declared in an interface are called abstract methods  An abstract class can have abstract methods, data fields, and concrete methods  Abstract class differs from a concrete class in that  An abstract class cannot be instantiated  An abstract class can declare abstract methods, which must be implemented in its subclasses  An interface can declare methods but does not provide an implementation of those methods  Methods declared in an interface are called abstract methods  An abstract class can have abstract methods, data fields, and concrete methods  Abstract class differs from a concrete class in that  An abstract class cannot be instantiated  An abstract class can declare abstract methods, which must be implemented in its subclasses

Abstract Classes and Interfaces  Like an interface, an abstract class can’t be instantiated  An abstract class can have constructors to initialize its data fields when a new subclass is created  Subclass uses super(…) to call the constructor  May implement an interface but it doesn’t have to define all of the methods declared in the interface  Implementation is left to its subclasses  Like an interface, an abstract class can’t be instantiated  An abstract class can have constructors to initialize its data fields when a new subclass is created  Subclass uses super(…) to call the constructor  May implement an interface but it doesn’t have to define all of the methods declared in the interface  Implementation is left to its subclasses

Abstract Class Number and the Java Wrapper Classes

Summary of Features of Actual Classes, Abstract Classes, and Interfaces

Class Object, Casting and Cloning  Object is the root of the class hierarchy; every class has Object as a superclass  All classes inherit the methods defined in class Object but may be overridden  Object is the root of the class hierarchy; every class has Object as a superclass  All classes inherit the methods defined in class Object but may be overridden

The Method toString  You should always override the toString method if you want to represent an object’s state  If you do not override it, the toString method for class Object will return a string…just not the string you want or are expecting  You should always override the toString method if you want to represent an object’s state  If you do not override it, the toString method for class Object will return a string…just not the string you want or are expecting

Operations Determined by Type of Reference Variable  A variable can reference an object whose type is a subclass of the variable type  The type of reference, not the type of the object referenced, determines what operations can be performed  Java is a strongly typed language so the compiler always verifies that the type of the expression being assigned is compatible with the variable type  A variable can reference an object whose type is a subclass of the variable type  The type of reference, not the type of the object referenced, determines what operations can be performed  Java is a strongly typed language so the compiler always verifies that the type of the expression being assigned is compatible with the variable type

Casting in a Class Hierarchy  Java provides casting to enable us to process one object referenced by one type through a reference variable of its actual type  Casting does not change the object referenced; it creates an anonymous reference to that object  Downcast: cast a higher type to a lower type  The instanceof operator can guard against ClassCastException errors  You can downcast an interface reference to the specific implementation type  Java provides casting to enable us to process one object referenced by one type through a reference variable of its actual type  Casting does not change the object referenced; it creates an anonymous reference to that object  Downcast: cast a higher type to a lower type  The instanceof operator can guard against ClassCastException errors  You can downcast an interface reference to the specific implementation type

Java 5.0 Reduces Need for Casting  Two new features that reduce the need for casting:  Autoboxing/unboxing  Generics  Autoboxing/unboxing eases the conversion between a primitive type and its corresponding wrapper type  Two new features that reduce the need for casting:  Autoboxing/unboxing  Generics  Autoboxing/unboxing eases the conversion between a primitive type and its corresponding wrapper type

The Method Object.equals  The Object.equals method has a parameter of type Object  Compares two objects to determine whether they are equal  You must override the equals method if you want to be able to compare two objects of a class  The Object.equals method has a parameter of type Object  Compares two objects to determine whether they are equal  You must override the equals method if you want to be able to compare two objects of a class

Cloning  The purpose of cloning in object-oriented programming is analogous to cloning in biology  Create an independent copy of an object  Initially, both objects will store the same information  You can change one object without affecting the other  Will cause both e1.name and e2.name to reference “Jim”  The purpose of cloning in object-oriented programming is analogous to cloning in biology  Create an independent copy of an object  Initially, both objects will store the same information  You can change one object without affecting the other  Will cause both e1.name and e2.name to reference “Jim”

The Shallow Copy Problem

 The statement e1.setAddressLine1("Room 224"); creates a new String object that is referenced by e1.address.line1 and e2.address.line1

The Object.clone method  Java provides the Object.clone method to help solve the shallow copy problem  The initial copy is a shallow copy as the current object’s data fields are copied  To make a deep copy, you must create cloned copies of all components by invoking their respective clone methods  Java provides the Object.clone method to help solve the shallow copy problem  The initial copy is a shallow copy as the current object’s data fields are copied  To make a deep copy, you must create cloned copies of all components by invoking their respective clone methods

The Object.clone method (continued)  After e1.setAddressLine1("Room 224"); only e1.address.line1 references the new String object.

Employee.clone()

Address.clone()

Multiple Inheritance, Multiple Interfaces, and Delegation  Multiple inheritance: the ability to extend more than one class  Multiple inheritance is a language feature that is difficult to implement and can lead to ambiguity  Therefore, Java does not allow a class to extend more than one class  Multiple inheritance: the ability to extend more than one class  Multiple inheritance is a language feature that is difficult to implement and can lead to ambiguity  Therefore, Java does not allow a class to extend more than one class

Using Multiple Interfaces to Emulate Multiple Inheritance  If we define two interfaces, a class can implement both  Multiple interfaces emulate multiple inheritance  If we define two interfaces, a class can implement both  Multiple interfaces emulate multiple inheritance

Using Multiple Interfaces to Emulate Multiple Inheritance (continued)

Implementing Reuse Through Delegation  You can reduce duplication of modifications and reduce problems associated with version control through a technique known as delegation  In delegation, a method of one class accomplishes an operation by delegating it to a method of another class  You can reduce duplication of modifications and reduce problems associated with version control through a technique known as delegation  In delegation, a method of one class accomplishes an operation by delegating it to a method of another class

Packages  The Java API is organized into packages  The package to which a class belongs is declared by the first statement in the file in which the class is defined using the keyword package followed by the package name  All classes in the same package are stored in the same directory or folder  All the classes in one folder must declare themselves to be in the same package  Classes that are not part of a package may access only public members of classes in the package  The Java API is organized into packages  The package to which a class belongs is declared by the first statement in the file in which the class is defined using the keyword package followed by the package name  All classes in the same package are stored in the same directory or folder  All the classes in one folder must declare themselves to be in the same package  Classes that are not part of a package may access only public members of classes in the package

The No-Package-Declared Environment and Package Visibility  There exists a default package  Files that do specify a package are considered part of the default package  If you don’t declare packages, all of your packages belong to the same, default package  Package visibility sits between private and protected  Classes, data fields, and methods with package visibility are accessible to all other methods of the same package but are not accessible to methods outside of the package  Classes, data fields, and methods that are declared protected are visible to all members of the package  There exists a default package  Files that do specify a package are considered part of the default package  If you don’t declare packages, all of your packages belong to the same, default package  Package visibility sits between private and protected  Classes, data fields, and methods with package visibility are accessible to all other methods of the same package but are not accessible to methods outside of the package  Classes, data fields, and methods that are declared protected are visible to all members of the package

Visibility Supports Encapsulation  The rules for visibility control how encapsulation occurs in a Java program  Private visibility is for members of a class that should not be accessible to anyone but the class, not even the classes that extend it  Package visibility allows the developer of a library to shield classes and class members from classes outside the package  Use of protected visibility allows the package developer to give control to other programmers who want to extend classes in the package  The rules for visibility control how encapsulation occurs in a Java program  Private visibility is for members of a class that should not be accessible to anyone but the class, not even the classes that extend it  Package visibility allows the developer of a library to shield classes and class members from classes outside the package  Use of protected visibility allows the package developer to give control to other programmers who want to extend classes in the package

Table 3.3  Private Visibility  Classes : Applicable to inner classes. Accessible only to members of the class in which it is declared.  Class Members: Visible only within this class.  Default (or package) Visibility  Classes : Visible to classes in this package.  Class Members : Visible to classes in this package.  Protected Visibility  Classes : Applicable to inner classes. Visible to classes in this package and to classes outside the package that extend the class in which it is declared.  Class Members : Visible to classes in this package and to classes outside the package that extend this class.  Public Visibility  Classes: Visible to all classes.  Class Members : Visible to all classes. The class defining the member must also be public.  Private Visibility  Classes : Applicable to inner classes. Accessible only to members of the class in which it is declared.  Class Members: Visible only within this class.  Default (or package) Visibility  Classes : Visible to classes in this package.  Class Members : Visible to classes in this package.  Protected Visibility  Classes : Applicable to inner classes. Visible to classes in this package and to classes outside the package that extend the class in which it is declared.  Class Members : Visible to classes in this package and to classes outside the package that extend this class.  Public Visibility  Classes: Visible to all classes.  Class Members : Visible to all classes. The class defining the member must also be public.

Visibility Supports Encapsulation (continued)

A Shape Class Hierarchy

A Shape Class Hierarchy (continued)

Object Factories  An object factory is a method that creates instances of other classes  Object factories are useful when:  The necessary parameters are not known or must be derived via computation  The appropriate implementation of an interface or abstract class should be selected as the result of some computation  An object factory is a method that creates instances of other classes  Object factories are useful when:  The necessary parameters are not known or must be derived via computation  The appropriate implementation of an interface or abstract class should be selected as the result of some computation

Object Factories (continued)

Chapter Review  Inheritance and class hierarchies to capture the idea that one thing may be a refinement or extension of another  Encapsulation and inheritance impose structure on object abstractions  The keyword interface defines an interface  The keyword abstract defines an abstract class or method  Delegation gains some of the advantages of multiple inheritance  Visibility is influenced by the package in which a class is declared  Inheritance and class hierarchies to capture the idea that one thing may be a refinement or extension of another  Encapsulation and inheritance impose structure on object abstractions  The keyword interface defines an interface  The keyword abstract defines an abstract class or method  Delegation gains some of the advantages of multiple inheritance  Visibility is influenced by the package in which a class is declared