Chap 09
Chap 09
Inheritance
John Lewis
William Loftus
Creating Subclasses
Overriding Methods
Class Hierarchies
Visibility
Designing for Inheritance
Car
• See Words.java
• See Book.java
• See Dictionary.java
//----------------------------------------------------------------
// Pages mutator.
//----------------------------------------------------------------
public void setPages (int numPages)
{
pages = numPages;
}
//----------------------------------------------------------------
// Pages accessor.
//----------------------------------------------------------------
public int getPages ()
{
return pages;
}
}
//-----------------------------------------------------------------
// Prints a message using both local and inherited values.
//-----------------------------------------------------------------
public double computeRatio ()
{
return (double) definitions/pages;
}
continue
//----------------------------------------------------------------
// Definitions mutator.
//----------------------------------------------------------------
public void setDefinitions (int numDefinitions)
{
definitions = numDefinitions;
}
//----------------------------------------------------------------
// Definitions accessor.
//----------------------------------------------------------------
public int getDefinitions ()
{
return definitions;
}
}
CoffeeMachine SodaMachine
totalReceipts totalReceipts
numberOfCups cansOfBeer
coffeeMix cansOfCola
collectMoney() collectMoney()
makeChange() makeChange()
heatWater() chill()
dispenseBeverage() dispenseBeverage()
addSugar()
addCreamer()
Example: Modeling a Coffee Machine
VendingMachine
VendingMachine
totalReceipts
collectMoney()
makeChange()
dispenseBeverage()
SodaMachine
CoffeeMachine
totalReceipts totalReceipts
cansOfBeer
numtotalReceiptsberOfCups
coffeeMix cansOfCola
CoffeeMachine
SodaMachine CandyMachine
numberOfCups
coffeeMix cansOfBeer bagsofChips
cansOfCola numberOfCandyBars
heatWater()
addSugar() chill() dispenseSnack()
addCreamer()
Example of a Specialization (2)
Vending Machine
totalReceipts
collectMoney()
makeChange()
dispenseItem()
CoffeeMachine
SodaMachine
numberOfCups CandyMachine
coffeeMix cansOfBeer
cansOfCola bagsofChips
heatWater() numberOfCandyBars
addSugar() chill()
addCreamer() dispenseItem() dispenseItem()
dispenseItem()
The protected Modifier
• Visibility modifiers affect the way that class
members can be used in a child class
Book
# pages : int
+ pageMessage() :
void
Words Dictionary
- definitions : int
+ main (args : String[]) :
void + definitionMessage() :
void
//----------------------------------------------------------------
// Constructor: Sets up the book with the specified number of
// pages.
//----------------------------------------------------------------
public Book2 (int numPages)
{
pages = numPages;
}
continue
//----------------------------------------------------------------
// Pages mutator.
//----------------------------------------------------------------
public void setPages (int numPages)
{
pages = numPages;
}
//----------------------------------------------------------------
// Pages accessor.
//----------------------------------------------------------------
public int getPages ()
{
return pages;
}
}
//-----------------------------------------------------------------
// Constructor: Sets up the dictionary with the specified number
// of pages and definitions.
//-----------------------------------------------------------------
public Dictionary2 (int numPages, int numDefinitions)
{
super(numPages);
definitions = numDefinitions;
}
continue
//-----------------------------------------------------------------
// Prints a message using both local and inherited values.
//-----------------------------------------------------------------
public double computeRatio ()
{
return (double) definitions/pages;
//----------------------------------------------------------------
// Definitions mutator.
//----------------------------------------------------------------
public void setDefinitions (int numDefinitions)
{
definitions = numDefinitions;
}
//----------------------------------------------------------------
// Definitions accessor.
//----------------------------------------------------------------
public int getDefinitions ()
{
return definitions;
}
}
Copyright © 2012 Pearson Education, Inc.
//********************************************************************
// Words2.java Author: Lewis/Loftus
//
// Demonstrates the use of the super reference.
//********************************************************************
Creating Subclasses
Overriding Methods
Class Hierarchies
Visibility
Designing for Inheritance
• See Messages.java
• See Thought.java
• See Advice.java
Copyright © 2012 Pearson Education, Inc.
//********************************************************************
// Thought.java Author: Lewis/Loftus
//
// Represents a stray thought. Used as the parent of a derived
// class to demonstrate the use of an overridden method.
//********************************************************************
System.out.println();
}
}
System.out.println();
parked.message();
dates.message(); // overridden
}
}
public class
I feel Messages
like I'm diagonally parked in a parallel universe.
{
//-----------------------------------------------------------------
// Creates two objects and invokes the message method in each.
//-----------------------------------------------------------------
public static void main (String[] args)
{
Thought parked = new Thought();
Advice dates = new Advice();
parked.message();
dates.message(); // overridden
}
}
Creating Subclasses
Overriding Methods
Class Hierarchies
Visibility
Designing for Inheritance
Creating Subclasses
Overriding Methods
Class Hierarchies
Visibility
Designing for Inheritance
• See FoodAnalyzer.java
• See FoodItem.java
• See Pizza.java
//-----------------------------------------------------------------
// Sets up this food item with the specified number of fat grams
// and number of servings.
//-----------------------------------------------------------------
public FoodItem (int numFatGrams, int numServings)
{
fatGrams = numFatGrams;
servings = numServings;
}
continue
//-----------------------------------------------------------------
// Computes and returns the number of calories in this food item
// due to fat.
//-----------------------------------------------------------------
private int calories()
{
return fatGrams * CALORIES_PER_GRAM;
}
//-----------------------------------------------------------------
// Computes and returns the number of fat calories per serving.
//-----------------------------------------------------------------
public int caloriesPerServing()
{
return (calories() / servings);
}
}
Creating Subclasses
Overriding Methods
Class Hierarchies
Visibility
Designing for Inheritance