CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods...
-
Upload
christiana-robbins -
Category
Documents
-
view
221 -
download
4
Transcript of CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods...
![Page 1: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/1.jpg)
CHAPTER 11
INHERITANCE
![Page 2: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/2.jpg)
CHAPTER GOALS
• To understand how to inherit and override
superclass methods
• To be able to invoke superclass constructors
• To learn about protected and package access
control
• To understand the common superclass Object and
to override its toString, equals, and clone methods
![Page 3: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/3.jpg)
Inheritance• Inheritance: extend classes by adding or redefining methods, and adding instance fields
• Example: Savings account = bank account with interest • class SavingsAccount extends BankAccount{ new methods new instance fields}
• All methods of BankAccount are automatically inherited
• Ok to call deposit, getBalance on SavingsAccount object
• Extended class = superclass, extending class = subclass
• Inheritance is different from realizing an interface o Interface is not a class o Interface supplies no instance fields or methods to inherit
![Page 4: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/4.jpg)
An Inheritance Diagram
![Page 5: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/5.jpg)
Adding a Subclass Method public class SavingsAccount extends BankAccount {
public SavingsAccount(double rate) {
interestRate = rate; }
public void addInterest() { double interest = getBalance() * interestRate / 100;
deposit(interest); }
private double interestRate; }
![Page 6: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/6.jpg)
Layout of a Subclass Object
![Page 7: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/7.jpg)
Syntax 11.1: Inheritanceclass SubclassName extends SuperclassName{ methods instance fields }Example:
public class SavingsAccount extends BankAccount {
public SavingsAccount(double rate) {
interestRate = rate; }
![Page 8: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/8.jpg)
public void addInterest() {
double interest = getBalance() * interestRate / 100;
deposit(interest); }
private double interestRate; }
Purpose:To define a new class that inherits from an existing class, and define the methods and instance fields that are added in the new class.
![Page 9: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/9.jpg)
Inheritance Hierarchies
• Hierarchies of classes, subclasses, and sub-subclasses are common
• Example: Swing hierarchy
• Superclass JComponent has methods getWidth, getHeight
• AbstractButton class has methods to set/get button text and icon
• We will study a simple bank account hierarchy
![Page 10: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/10.jpg)
A Part of the Hierarchy of Ancient Reptiles
![Page 11: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/11.jpg)
A Part of the Hierarchy of Swing UI Components
![Page 12: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/12.jpg)
Bank Account Hierarchy
![Page 13: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/13.jpg)
Inheritance and Methods• Override method: Supply a different implementation of a method that exists in the superclass • Inherit method: Don't supply a new implementation of a method that exists in the superclass • Add method: Supply a new method that doesn't exist in the superclass
![Page 14: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/14.jpg)
Inheritance and Fields • Inherit field: All fields from the superclass are automatically inherited
•Add field: Supply a new field that doesn't exist in the superclass
•Can't override fields
![Page 15: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/15.jpg)
CheckingAccount Class •First three transactions are free •Charge $2 for every additional transaction •Must override deposit, withdraw to increment transaction count•deductFees method deducts accumulated fees, resets transaction count
![Page 16: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/16.jpg)
Inherited Fields are Private• Consider deposit method of CheckingAccountpublic void deposit(double amount){ transactionCount++; // now add amount to balance ...}
• Can't just add amount to balance •balance is a private field of the superclass • Subclass must use public interface
![Page 17: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/17.jpg)
Invoking a Superclass Method• Can't just calldeposit(amount)in deposit method of CheckingAccount
• That is the same asthis.deposit(amount)
• Calls the same method (infinite recursion) • Instead, invoke superclass methodsuper.deposit(amount)
• Now calls deposit method of BankAccount class • Complete method:public void deposit(double amount){ transactionCount++; super.deposit(amount);}
![Page 18: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/18.jpg)
Syntax 11.2: Calling a Superclass Method
super.methodName(parameters)
Example:
public void deposit(double amount){ transactionCount++; super.deposit(amount);}
Purpose:
To call a method of the superclass instead of the method of the current class
![Page 19: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/19.jpg)
Superclass Constructionpublic class CheckingAccount extends BankAccount
{ public CheckingAccount(double initialBalance) {
// construct superclass super(initialBalance); // initialize transaction count transactionCount =0;
}
... }
Pass parameters to superclass constructor • Must be the first statement in subclass constructor
![Page 20: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/20.jpg)
Syntax 11.3: Calling a Superclass Constructor
ClassName(parameters){ super(parameters); . . .}
Example: public CheckingAccount(double initialBalance){ super(initialBalance); transactionCount =0; }
Purpose:To invoke a constructor of the superclass. Note that this statement must be the first statement of the subclass constructor.
![Page 21: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/21.jpg)
Converting from Subclasses to Superclasses
• Ok to convert subclass reference to superclass reference •SavingsAccount collegeFund = new SavingsAccount(10);BankAccount anAccount = collegeFund;
Object anObject = collegeFund;
• Superclass references don't know the full story:anAccount.addInterest(); // ERROR
• Why would anyone want to know less about an object?
![Page 22: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/22.jpg)
Variables of Different Types Refer to Same Object
![Page 23: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/23.jpg)
Polymorphism • Generic method:public void transfer(double amount, BankAccount other){ withdraw(amount); other.deposit(amount);}
• Works with any kind of bank account (plain, checking, savings) • Subclass object reference converted to superclass reference othermomsAccount.transfer(1000, harrysChecking);
• Note polymorphism:other.deposit(amount)calls CheckingAccount.deposit (and charges transaction fee)
• Why not just declare parameter as Object?
• Object class doesn't have deposit method
![Page 24: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/24.jpg)
File AccountTest.java1 /**
2 This program tests the BankAccount class and
3 their subclasses.
4 */
5 public class AccountTest
6 {
7 public static void main(String[] args)
8 {
9 SavingsAccount momsSavings
10 = new SavingsAccount(0.5);
11
12 CheckingAccount harrysChecking
13 = new CheckingAccount(100);
14
15 momsSavings.deposit(10000);
16
17 momsSavings.transfer(harrysChecking, 2000);
![Page 25: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/25.jpg)
18 harrysChecking.withdraw(1500);
19 harrysChecking.withdraw(80);
20
21 momsSavings.transfer(harrysChecking, 1000);
22 harrysChecking.withdraw(400);
23
24 // simulate end of month
25 momsSavings.addInterest();
26 harrysChecking.deductFees();
27
28 System.out.println("Mom's savings balance = $"
29 + momsSavings.getBalance());
30
31 System.out.println("Harry's checking balance = $"
32 + harrysChecking.getBalance());
33 }
34 }
![Page 26: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/26.jpg)
File BankAccount.java 1 /**
2 A bank account has a balance that can be changed by
3 deposits and withdrawals.
4 */
5 public class BankAccount
6 {
7 /**
8 Constructs a bank account with a zero balance
9 */
10 public BankAccount()
11 {
12 balance = 0;
13 }
14
15 /**
16 Constructs a bank account with a given balance
17 @param initialBalance the initial balance
![Page 27: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/27.jpg)
18 */
19 public BankAccount(double initialBalance)
20 {
21 balance = initialBalance;
22 }
23
24 /**
25 Deposits money into the bank account.
26 @param amount the amount to deposit
27 */
28 public void deposit(double amount)
29 {
30 balance = balance + amount;
31 }
32
33 /**
34 Withdraws money from the bank account.
35 @param amount the amount to withdraw
36 */
37 public void withdraw(double amount)
![Page 28: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/28.jpg)
38 {
39 balance = balance - amount;
40 }
41
42 /**
43 Gets the current balance of the bank account.
44 @return the current balance
45 */
46 public double getBalance()
47 {
48 return balance;
49 }
50
51 /**
52 Transfers money from the bank account to another account
53 @param other the other account
54 @param amount the amount to transfer
55 */
56 public void transfer(BankAccount other, double amount)
57 {
![Page 29: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/29.jpg)
58 withdraw(amount);
59 other.deposit(amount);
60 }
61
62 private double balance;
63 }
![Page 30: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/30.jpg)
File CheckingAccount.java1 /**
2 A checking account that charges transaction fees.
3 */
4 public class CheckingAccount extends BankAccount
5 {
6 /**
7 Constructs a checking account with a given balance
8 @param initialBalance the initial balance
9 */
10 public CheckingAccount(int initialBalance)
11 {
12 // construct superclass
13 super(initialBalance);
14
15 // initialize transaction count
16 transactionCount = 0;
17 }
![Page 31: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/31.jpg)
18
19 public void deposit(double amount)
20 {
21 transactionCount++;
22 // now add amount to balance
23 super.deposit(amount);
24 }
25
26 public void withdraw(double amount)
27 {
28 transactionCount++;
29 // now subtract amount from balance
30 super.withdraw(amount);
31 }
32
33 /**
34 Deducts the accumulated fees and resets the
35 transaction count.
36 */
37 public void deductFees()
![Page 32: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/32.jpg)
38 {
39 if (transactionCount > FREE_TRANSACTIONS)
40 {
41 double fees = TRANSACTION_FEE *
42 (transactionCount - FREE_TRANSACTIONS);
43 super.withdraw(fees);
44 }
45 transactionCount = 0;
46 }
47
48 private int transactionCount;
49
50 private static final int FREE_TRANSACTIONS = 3;
51 private static final double TRANSACTION_FEE = 2.0;
52 }
![Page 33: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/33.jpg)
File SavingsAccount.java 1 /**
2 An account that earns interest at a fixed rate.
3 */
4 public class SavingsAccount extends BankAccount
5 {
6 /**
7 Constructs a bank account with a given interest rate
8 @param rate the interest rate
9 */
10 public SavingsAccount(double rate)
11 {
12 interestRate = rate;
13 }
14
15 /**
16 Adds the earned interest to the account balance.
17 */
![Page 34: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/34.jpg)
18 public void addInterest()
19 {
20 double interest = getBalance() * interestRate / 100;
21 deposit(interest);
22 }
23
24 private double interestRate;
25 }
![Page 35: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/35.jpg)
Access Control Level
• public • private
• protected (accessible by subclasses and package)
• package access (the default, no modifier)
![Page 36: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/36.jpg)
Recommended Access Levels • Fields: Always private
• Exception: public static final constants • Methods: public or private
• Classes: public or package
• Don't use protected
• Beware of accidental package access (forgetting public or private)
![Page 37: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/37.jpg)
Object: The Cosmic Superclass
• All classes extend Object
• Most useful methods: o String toString() o boolean equals(Object otherObject)
o Object clone()
![Page 38: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/38.jpg)
The Object Class is the Superclass of Every Java Class
![Page 39: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/39.jpg)
Overriding the toString Method • Returns a string representation of the object
• Useful for debugging
• Example: Rectangle.toString returns something likejava.awt.Rectangle[x=5,y=10,width=20,height=30]
• toString used by concatenation operator
• aString + anObjectmeans aString + anObject.toString()
• Object.toString prints class name and object addressBankAccount@d2460bf
• Override toString:public class BankAccount{ public String toString() { return "BankAccount[balance=" + balance + "]"; } . . .}
![Page 40: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/40.jpg)
Overriding the equals Method• equals tests for equal contents
• == tests for equal location
• Must cast the Object parameter to subclass
• public class Coin{ public boolean equals(Object otherObject) { Coin other = (Coin)otherObject; return name.equals(other.name) && value == other.value; }}
![Page 41: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/41.jpg)
Two References to Equal Objects
![Page 42: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/42.jpg)
Two References to Same Object
![Page 43: CHAPTER 11 INHERITANCE. CHAPTER GOALS To understand how to inherit and override superclass methods To be able to invoke superclass constructors To learn.](https://reader036.fdocuments.us/reader036/viewer/2022062407/56649f445503460f94c65e75/html5/thumbnails/43.jpg)
Overriding the clone Method• Copying object reference gives two references to same object
BankAccount account2 = account1; • Sometimes, need to make a copy of the object • Use clone:
BankAccount account2 = (BankAccount)account1.clone(); • Must cast return value because return type is Object • Define clone method to make new object:
public Object clone(){ BankAccount cloned = new BankAccount(); cloned.balance = balance; return cloned;}
• Warning: This approach doesn't work with inheritance--see Advanced Topic 11.6