Transcript
Page 1: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-1 Copyright (c) 1999-2004 N. Afshartous

Contents1. Classes and Objects

2. Inheritance3. Interfaces

4. Exceptions and Error Handling

5. Intro to Concurrency

6. Concurrency in Java

7. Graphics and Animation

8. Applets

Page 2: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-2 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-3 Copyright (c) 1999-2004 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 PersonNameAgeLocation

eat()sleep()

class EmployeeSS#

work()

Is-A

Page 4: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-4 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-5 Copyright (c) 1999-2004 N. Afshartous

Other Inheritance Examples

Chair

Lounge Chair

Phone

Rotary Phone

Touch Tone Phone

Cordless Phone

DeskChair

Adjustable Desk Chair

Page 6: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-6 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-7 Copyright (c) 1999-2004 N. Afshartous

Other Languages

• Other OO languages with inheritance are:– C++

– Eiffel

– SmallTalk

– Ada95

Page 8: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-8 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-9 Copyright (c) 1999-2004 N. Afshartous

Inheritance in Java• Use keywordextends

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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-10 Copyright (c) 1999-2004 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

OutputOutput

balance: 100 owner: "nobody"

numShares: 0

Page 11: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-11 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-12 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-13 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-14 Copyright (c) 1999-2004 N. Afshartous

More About Superclass Constructors

• In fact when an object is created some constructor for every class in the related hierchymust be called

• The default constructor of superclasses is invoked automatically unless super is used to call a non-default constructor

Page 15: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-15 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-16 Copyright (c) 1999-2004 N. Afshartous

Answer• No default constructor is provided by class

Accountclass 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-17 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-18 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-19 Copyright (c) 1999-2004 N. Afshartous

Solution• Use keywordsuper 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-20 Copyright (c) 1999-2004 N. Afshartous

Complete Exampleclass 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-21 Copyright (c) 1999-2004 N. Afshartous

Example continuedpublic 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-22 Copyright (c) 1999-2004 N. Afshartous

Example continuedpublic int getBalance () {

int cash = super.getBalance();return cash + (numShares * stockPrice);

}public void setStockPrice (int p) {

stockPrice = p;}

} /* end class BrokerageAccount */

Page 23: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-23 Copyright (c) 1999-2004 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.getBalanc e());

BrokerageAccount b = new BrokerageAccount(600,"mary") ;b.buy(10, 50); System.out.println("mary’s balance = " + b.getBalanc e());

fred’s balance = 1000mary’s balance = 600

OutputOutput

Page 24: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-24 Copyright (c) 1999-2004 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 typeb’s type object b will be bound to at run-time

object b will be bound to at run-time

Page 25: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-25 Copyright (c) 1999-2004 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 incorporatepolymorphism

BrokerageAccount b = new Account(600,"mary");

Page 26: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-26 Copyright (c) 1999-2004 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 BrokerageAccou nt,

calls Account.deposit() */

Page 27: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-27 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-28 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-29 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-30 Copyright (c) 1999-2004 N. Afshartous

Question• Which getBalance is going to be called ?

void processAccount (Account a) {...balance = a.getBalance();...

}

Page 31: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-31 Copyright (c) 1999-2004 N. Afshartous

Answer• Could be either!

• processAccount could be called multiple times with Account andBrokerageAccount

objects

• the type of object will determine which getBalance gets called

void processAccount (Account a) {...balance = a.getBalance();...

}

Page 32: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-32 Copyright (c) 1999-2004 N. Afshartous

End of Part I

Page 33: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-33 Copyright (c) 1999-2004 N. Afshartous

It’s Exercise Time

Page 34: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-34 Copyright (c) 1999-2004 N. Afshartous

Part II

Page 35: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-35 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-36 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-37 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-38 Copyright (c) 1999-2004 N. Afshartous

Another Exampleclass 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-39 Copyright (c) 1999-2004 N. Afshartous

class Person {Car myCar = null;public Person (Car myCar) { this.myCar = myCar; }public void startCar () { myCar.start(); }

}

Page 40: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-40 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-41 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-42 Copyright (c) 1999-2004 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 useMiniVans with class Person

• and the right start gets called

Page 43: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-43 Copyright (c) 1999-2004 N. Afshartous

Summary

• We applied OO polymorphism to:

– make classPerson 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-44 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-45 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-46 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-47 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-48 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-49 Copyright (c) 1999-2004 N. Afshartous

Declaring An Abstract Class• Use keyword abstract

• Cannot create a Thing object

• Compile-time error

abstract class Thing {

}

new Thing();

Page 50: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-50 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-51 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-52 Copyright (c) 1999-2004 N. Afshartous

Error• Not defining print would produce a compile-

time error

• Must either defineprint 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-53 Copyright (c) 1999-2004 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: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-54 Copyright (c) 1999-2004 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

Page 55: Contents · Balance of Brokerage Acct ... public BrockerageAccount (int balance, String owner) {super(balance, owner); ... 2/23/2004 9:03:34 PM

2-55 Copyright (c) 1999-2004 N. Afshartous

It’s Exercise Time


Top Related