2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces...
-
Upload
karin-conley -
Category
Documents
-
view
214 -
download
0
Transcript of 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces...
![Page 1: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/1.jpg)
2-1 Copyright (c) 1999 N. Afshartous
Contents1. Classes and Objects
2. Inheritance
3. Interfaces
4. Exceptions and Error Handling
5. Intro to Concurrency
6. Concurrency in Java
7. Graphics and Animation
8. Applets
![Page 2: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/2.jpg)
2-2 Copyright (c) 1999 N. Afshartous
Chapter 2: InheritanceAfter this chapter you will be able to:
- Extend existing classes using inheritance
- Apply polymorphism
- Understand static and dynamic binding
- Use abstract classes
![Page 3: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/3.jpg)
2-3 Copyright (c) 1999 N. Afshartous
Inheritance• Can define a class by inheriting the data
attributes and methods of another object
• Inheritance is used to model the Is-A relationship
• An Employee Is-A Person
class Person
NameAgeLocation
eat()sleep()
class Employee
SS#
work()
Is-A
![Page 4: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/4.jpg)
2-4 Copyright (c) 1999 N. Afshartous
Instantiation with Inheritance• An Employee object has attributes defined in
class Employee and Person
Name: FredAge: 40Location: New York
SS#: 321-11-1232
![Page 5: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/5.jpg)
2-5 Copyright (c) 1999 N. Afshartous
Other Inheritance Examples
Chair
Lounge Chair
Phone
Rotary Phone
Touch Tone Phone
Cordless Phone
DeskChair
Adjustable Desk Chair
![Page 6: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/6.jpg)
2-6 Copyright (c) 1999 N. Afshartous
Benefits• Can use existing classes when defining new
(more specialized) classes
• Well see later that polymorphism will:– facilitate software maintenance– allow us to write code that is generic
![Page 7: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/7.jpg)
2-7 Copyright (c) 1999 N. Afshartous
Other Languages
• Other OO languages with inheritance are:– C++– Eiffel– SmallTalk– Ada95
![Page 8: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/8.jpg)
2-8 Copyright (c) 1999 N. Afshartous
Terms• More generic class is called the superclass
(parent)
• More specialized class is called the subclass (child)
• The set of Lounge chairs is a subset of the set of all Chairs
Chair
Lounge Chair
Superclass (parent)
Subclass (child)
![Page 9: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/9.jpg)
2-9 Copyright (c) 1999 N. Afshartous
Inheritance in Java• Use keyword extends class Account { private int balance; private String owner;
public Account (int b, String o) {...} public Account () {...} void deposit (int d) { ... } void withdraw (int d) { ... } public int getBalance () {...} public String getOwner () {...} } class BrokerageAccount extends Account { private int numShares;
public BrokerageAccount () { numShares = 0; } }
![Page 10: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/10.jpg)
2-10 Copyright (c) 1999 N. Afshartous
Using A Brockerage Account• Can access the public interface provided by
class Account
BrokerageAccount b = new BrokerageAccount();
System.out.println(“Balance = “ + b.getBalance());b.deposit(100);System.out.println(“Balance = “ + b.getBalance());
Balance = 0Balance = 100
Output Output
balance: 100 owner: “nobody”
numShares: 0
![Page 11: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/11.jpg)
2-11 Copyright (c) 1999 N. Afshartous
Inheritance and Private
• Cannot access the inherited private parts
• Compile-time error
BrokerageAccount b = new BrokerageAccount();
System.out.println(“balance = “ + b.balance);
![Page 12: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/12.jpg)
2-12 Copyright (c) 1999 N. Afshartous
Inheritance and Constructors• Problem: the constructor needs to initialize
private parts of class Account
• Solution: use keyword super to invoke the superclass constructor
class BrokerageAccount extends Account { private int numShares;
public BrokerageAccount () { numShares = 0; } public BrockerageAccount (int balance, String owner) { this.balance = balance; this.owner = owner; }
![Page 13: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/13.jpg)
2-13 Copyright (c) 1999 N. Afshartous
Calling Superclass Constructor• Call the superclass constructor which accepts int and String arguments
• Calling super will search the superclasses in the inheritance hiercy for a matching constructor
class BrokerageAccount extends Account { private int numShares;
public BrokerageAccount () { numShares = 0; } public BrockerageAccount (int balance, String owner) { super(balance, owner); }
![Page 14: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/14.jpg)
2-14 Copyright (c) 1999 N. Afshartous
More About Superclass Constructors
• In fact when an object is created some constructor for every class in the related hierchy must be called
• The default constructor of superclasses is invoked automatically unless super is used to call a non-default constructor
![Page 15: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/15.jpg)
2-15 Copyright (c) 1999 N. Afshartous
Question• Compile-time error: can you see why ? class Account { private int balance; private String owner;
public Account (int b, String o) {...} void deposit (int d) { ... } void withdraw (int d) { ... } public int getBalance () {...} public String getOwner () {...} } class BrokerageAccount extends Account { private int numShares; private int stockPrice;
public BrokerageAccount () { numShares = 0; stockPrice = 0; } }
![Page 16: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/16.jpg)
2-16 Copyright (c) 1999 N. Afshartous
Answer• No default constructor is provided by class Account
class Account { ... public Account (int b, String o) {...} ... } class BrokerageAccount extends Account { private int numShares; private int stockPrice;
public BrokerageAccount () { super(0,”nobody”); /*gets rid of error */ numShares = 0; stockPrice = 0; } }
![Page 17: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/17.jpg)
2-17 Copyright (c) 1999 N. Afshartous
Buying Stock
class BrokerageAccount extends Account { private int numShares; private int stockPrice; ... public void buy (int numShares) { int transactionAmount = numShares * stockPrice; if (getBalance() < transactionAmount) { System.out.println(“illegal transaction”); return; } this.numShares += numShares; withdraw(transactionAmount); }
• Buying involves withdrawing from the cash part of the Account
![Page 18: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/18.jpg)
2-18 Copyright (c) 1999 N. Afshartous
Balance of Brokerage Acct• Balance is the sum of the cast Account and
the value of the stock at a given price
• Can override the definition of getBalance in class Account with a definition in class BrokerageAccount
• Problem: need to call getBalance in the superclass to get the cash balance
class BrokerageAccount extends Account { private int numShares; ... public int getBalance () {...
![Page 19: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/19.jpg)
2-19 Copyright (c) 1999 N. Afshartous
Solution• Use keyword super to call the superclass
method
class BrokerageAccount extends Account { private int numShares; ... public int getBalance () { int cash = super.getBalance(); return cash + (numShares * stockPrice); }}
![Page 20: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/20.jpg)
2-20 Copyright (c) 1999 N. Afshartous
Complete Example class BrokerageAccount extends Account { private int numShares;
public BrokerageAccount () { numShares = 0; } public BrockerageAccount (int balance, String owner) { super(balance, owner);
public void buy (int numShares) { int transactionAmount = numShares * stockPrice; if (getBalance() < transactionAmount) { System.out.println(“illegal transaction”); return; } this.numShares += numShares; withdraw(transactionAmount); } ...
![Page 21: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/21.jpg)
2-21 Copyright (c) 1999 N. Afshartous
Example continued public void buy (int numShares) { int transactionAmount = numShares * stockPrice; if (getBalance() < transactionAmount) { System.out.println(“illegal transaction”); return; } this.numShares += numShares; withdraw(transactionAmount); } public void sell (int numShares) { if (this.numShares < numShares) { System.out.println(“illegal translation”); return; } this.numShares -= numShares; deposit(numShares * stockPrice); }...
![Page 22: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/22.jpg)
2-22 Copyright (c) 1999 N. Afshartous
Example continued public int getBalance () { int cash = super.getBalance(); return cash + (numShares * stockPrice); } public void setStockPrice (int p) { stockPrice = p; }} /* end class BrokerageAccount */
![Page 23: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/23.jpg)
2-23 Copyright (c) 1999 N. Afshartous
Calling getBalance• Can call getBalance using Account and BrokerageAccount objects
Account a = new Account(1000,”fred”);System.out.println(“fred’s balance = “ + a.getBalance());
BrokerageAccount b = new BrokerageAccount(600,”mary");b.buy(10, 50); System.out.println(“mary’s balance = “ + b.getBalance());
fred’s balance = 1000mary’s balance = 600
Output Output
![Page 24: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/24.jpg)
2-24 Copyright (c) 1999 N. Afshartous
Subclass to Superclass Conversion
• A variable of type A can be bound to any object of type A or any of A’s subclasses
• This rule allows BrokerageAccount objects to be used in contexts where the Account type is specified
Account b = new BrokerageAccount(600,”mary");
b’s type b’s type object b will be bound to at run-time
object b will be bound to at run-time
![Page 25: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/25.jpg)
2-25 Copyright (c) 1999 N. Afshartous
Illegal Conversion• The converse is not legal: A variable cannot be
bound to any superclasses of it’s type
• Compile-time error
• Soon we’ll see that the legal conversion will allow us to incorporate polymorphism
BrokerageAccount b = new Account(600,”mary");
![Page 26: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/26.jpg)
2-26 Copyright (c) 1999 N. Afshartous
Calling Deposit• Method lookup: performed at run-time starting
at the object’s class and then continuing with superclasses (if necessary) until a corresponding method definition is found
Account a = new Account(1000,”fred”);a.deposit(100); /* calls Account.deposit() */ Account b = new BrokerageAccount(600,”mary");b.deposit(100); /* no definition in BrokerageAccount, calls Account.deposit() */
![Page 27: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/27.jpg)
2-27 Copyright (c) 1999 N. Afshartous
Calling getBalance• There are two definitions of getBalance
• The decision regarding which method to call is made at run-time based on the object (not the variables type)
Account a = new Account(1000,”fred”);a.getBalance(); /* calls Account.getBalance() */ Account b = new BrokerageAccount(600,”mary");b.getBalance(100);/* calls BrokerageAccount.getBalance()*/
![Page 28: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/28.jpg)
2-28 Copyright (c) 1999 N. Afshartous
Static vs Dynamic Binding
• Static binding: decides which method to call at compile-time based on type information
• Dynamic binding: decides which method to call at run-time based on the object used
• In Java (and SmallTalk, Eiffel) the default is dynamic binding
• In C++ the default is static binding
![Page 29: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/29.jpg)
2-29 Copyright (c) 1999 N. Afshartous
The Tradeoff• Dynamic binding:
- extra overhead (need to decide which method to call at run-time)
+ flexibility
• Static binding:- less flexibility (decision is fixed at compile-time) + efficiency
![Page 30: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/30.jpg)
2-30 Copyright (c) 1999 N. Afshartous
Question• Which getBalance is going to be called ?
void processAccount (Account a) { ... balance = a.getBalance(); ...}
![Page 31: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/31.jpg)
2-31 Copyright (c) 1999 N. Afshartous
Answer• Could be either!• processAccount could be called multiple
times with Account and BrokerageAccount objects
• the type of object will determine which getBalance gets called
void processAccount (Account a) { ... balance = a.getBalance(); ...}
![Page 32: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/32.jpg)
2-32 Copyright (c) 1999 N. Afshartous
End of Part I
![Page 33: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/33.jpg)
2-33 Copyright (c) 1999 N. Afshartous
It’s Exercise Time
![Page 34: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/34.jpg)
2-34 Copyright (c) 1999 N. Afshartous
Part II
![Page 35: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/35.jpg)
2-35 Copyright (c) 1999 N. Afshartous
Polymorphism• English meaning of polymorhpism is: pertaining
to multiple forms
• In the context of programing languages polymorphism means:– programs which operate on many types– data which have many types
• Two kinds of polymorphism:– OO polymorphism: constrained by a set of classes
related by inheritance– Parametric polymorphism: type variables are used
![Page 36: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/36.jpg)
2-36 Copyright (c) 1999 N. Afshartous
Benefits of Polymorphism• Genericity: Can write generic code that can be
applied to different kinds of objects
• method processAccount can be applied to Account and BrokerageAccount objects
• The appropriate getBalance will be called
void processAccount (Account a) { ... balance = a.getBalance(); ...}
![Page 37: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/37.jpg)
2-37 Copyright (c) 1999 N. Afshartous
Benefits of Polymorphism• Software maintenance: can extend the
inheritance hierchy with new classes that can work with existing code
• Can call processAccount with an IRA_Account object without recompiling processAccount
class IRA_Account extends Account { public int getBalance () {...}
processAccount(new IRA_Account(200,”sam”))
![Page 38: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/38.jpg)
2-38 Copyright (c) 1999 N. Afshartous
Another Example class Car {
private String type;public Car (String type) { this.type = type; }public void start () { .../* generic start */ }
} class SportsCar extends Car {
public SportsCar (String type) { super(type); }public void start () {.../* specific for SportsCar }
}
class Limo extends Car {public Limo (String type) { super(type); }public void start () { .../* specific for Limo */ }
} }
![Page 39: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/39.jpg)
2-39 Copyright (c) 1999 N. Afshartous
class Person {
Car myCar = null; public Person (Car myCar) { this.myCar = myCar; } public void startCar () { myCar.start(); }
}
![Page 40: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/40.jpg)
2-40 Copyright (c) 1999 N. Afshartous
Questions
Person ed = new Person(new Car("chevy")); ed.startCar();
Person sally = new Person(new Limo("lincoln")); sally.startCar();
• Calling startCar will indirectly call method start of which class ?
• How about now ?
![Page 41: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/41.jpg)
2-41 Copyright (c) 1999 N. Afshartous
Answers
Person ed = new Person(new Car("chevy")); ed.startCar(); /* indirectly call Car.start() */
Person sally = new Person(new Limo("lincoln")); sally.startCar(); /* indirectly call LimoCar.start() */
class Person { Car myCar = null; public Person (Car myCar) { this.myCar = myCar; } public void startCar () { myCar.start(); }
}
![Page 42: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/42.jpg)
2-42 Copyright (c) 1999 N. Afshartous
Adding MiniVans
Person sally = new Person(new MiniVan("lincoln")); sally.startCar(); /* indirectly call MiniVan.start() */
class MiniVan extends Car {public MinVan (String type) { super(type); }public void start () {.../* specific for MiniVan*/ }
}
• Can use MiniVans with class Person
• and the right start gets called
![Page 43: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/43.jpg)
2-43 Copyright (c) 1999 N. Afshartous
Summary
• We applied OO polymorphism to:
– make class Person more generic (a person can have different types of cars)
– facilitate software maintenance (added a new type of car which still works with class Person)
![Page 44: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/44.jpg)
2-44 Copyright (c) 1999 N. Afshartous
Inheritance and Access• Using protected, a class can present a
different interface for its subclasses – protected: access given to the class and its
subclasses– public: access unrestricted– default (no keyword specified): access given to
code inside the same package as the class
![Page 45: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/45.jpg)
2-45 Copyright (c) 1999 N. Afshartous
Using Protected• ID can be accessed from subclasses of Account
class Account { private int balance; private String owner; protected int ID; public Account (int b, String o, int ID) {...} void deposit (int d) { ... } public int getBalance () {...} public String getOwner () {...} }
![Page 46: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/46.jpg)
2-46 Copyright (c) 1999 N. Afshartous
Direct Access From Subclasses• Can access ID from BrokerageAccount
class BrokerageAccount extends Account { private int numShares; ... public void print () { System.out.println(“Brockerage Acct: “ + ID); } }
![Page 47: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/47.jpg)
2-47 Copyright (c) 1999 N. Afshartous
But Not From Outside• Cannot Access ID outside of Account and
BrokerageAccount
• Compile-time error
Account a = new Account(1000,”fred”,402);System.out.println(“ID = “ + a.ID);
![Page 48: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/48.jpg)
2-48 Copyright (c) 1999 N. Afshartous
Abstract Classes
• Abstract classes:– cannot be instantiated– may contain the specifications of methods that must
be defined by concrete subclasses
• Concrete classes are subclasses of abstract classes where all abstract method specifications have been defined (or have been defined by intermediate superclasses)
![Page 49: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/49.jpg)
2-49 Copyright (c) 1999 N. Afshartous
Declaring An Abstract Class• Use keyword abstract
• Cannot create a Thing object
• Compile-time error
abstract class Thing { }
new Thing();
![Page 50: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/50.jpg)
2-50 Copyright (c) 1999 N. Afshartous
Abstract Methods• Use abstract in the method specification
• An abstract class may contain both abstract and concrete methods
abstract class Thing { String name; public Thing (String name) { this.name = name; } public String getName () { return name; } public abstract void print (); /* no body */}
![Page 51: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/51.jpg)
2-51 Copyright (c) 1999 N. Afshartous
Concrete Class• Can make a concrete class by:
– extending Thing– implementing the print specification
class Person extends Thing { String address; public Person (String name, String address) {
super(name); this.address = address;
} public void print () { System.out.println("Person: " + getName()); System.out.println("Address: " + address); }
}
![Page 52: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/52.jpg)
2-52 Copyright (c) 1999 N. Afshartous
Error• Not defining print would produce a compile-
time error
• Must either define print or define Person as abstract
class Person extends Thing { String address; public Person (String name, String address) {
super(name); this.address = address;
} /* no definition of print */}
![Page 53: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/53.jpg)
2-53 Copyright (c) 1999 N. Afshartous
Another Concrete Class• Can have different concrete classes with
different implementations of print
class Car extends Thing { String model;
public Car (String name, String model) { super(name);
this.model = model; } public void print () {
System.out.println("Car: " + getName()); System.out.println("Model: " + model);
}
}
![Page 54: 2-1 Copyright (c) 1999 N. Afshartous Contents 1.Classes and Objects 2.Inheritance 3.Interfaces 4.Exceptions and Error Handling 5.Intro to Concurrency 6.Concurrency.](https://reader034.fdocuments.net/reader034/viewer/2022051622/5697c0031a28abf838cc37c7/html5/thumbnails/54.jpg)
2-54 Copyright (c) 1999 N. Afshartous
Reference• “On Understanding Types, Data Abstraction
and Polymorphism” by Luca Cardelli (Microsoft Research) available on the web at:– www.luca.demon.co.uk
• click on “Papers” link and then look for title