Inheritance and Interfaces

Download Report

Transcript Inheritance and Interfaces

02:Inheritance and Interfaces
1
ACM/JETT Workshop - August 4-5, 2005
Inheritance and Interfaces
This is a relatively long lecture and we will
cover a number of very important ObjectOriented concepts.
Please note that all the features covered are
used in the MarineBiologyCaseStudy.
2
ACM/JETT Workshop - August 4-5, 2005
Topics
• Inheritance
• Defining a class using inheritance in
Java
• Overriding methods
• Abstract classes
• Substitutability.
• Interfaces
• Dynamic binding.
• Casting
3
ACM/JETT Workshop - August 4-5, 2005
Inheritance
• What is inheritance?
• A class (child class)
–inherits the functionality of another
class (parent class), and then
–adds new functionality of its own.
• Java supports single inheritance.
• Inheritance is a requirement of all
object-oriented systems.
4
ACM/JETT Workshop - August 4-5, 2005
Inheritance – An Example
CheckingAccounts and
SavingsAccounts are
types of BankAccounts.
They all have properties
like acctId, balance,
deposit and withdraw.
But CheckingAccount and
SavingsAccount also have
some special properties of
their own.
5
ACM/JETT Workshop - August 4-5, 2005
Why inheritance
• Inheritance is a technique for reuse.
• If a new class has a lot in common with a
class that already exists, you can reuse
parts of the existing class in the new class.
• The child class is defined by extending the
parent class.
• The new ``child'' class has all
characteristics of its ``parent'' plus any it
adds itself.
6
ACM/JETT Workshop - August 4-5, 2005
Inheritance (an is-a relationship)
• Inheritance is a parent-child
relationship between classes.
• The parent class is also called a base
class or a superclass.
• The child class is also called a derived
class or subclass.
7
ACM/JETT Workshop - August 4-5, 2005
Inheritance – Some Examples
BankAccount is the
base class (parent class,
superclass)
SavingsAccount is-a BankAccount.
CheckingAccount is-a
BankAccount
CheckingAccount and SavingsAccount
are the derived classes (child classes,
subclasses)
8
ACM/JETT Workshop - August 4-5, 2005
Inheritance
• A child class inheriting from a parent
class may
–Define new instance data members
and/or methods, and also may
–Override methods inherited from
parent class.
9
ACM/JETT Workshop - August 4-5, 2005
Extension and Overriding
CheckingAccount and
SavingsAccount inherit
the deposit() and
withdraw().
CheckingAccount adds a
new method,
overdraftProtection() and
overrides withdraw()
SavingsAccount adds a
new method,
annualInterest()
Show
class CheckingAccount
Example1_22
10
ACM/JETT Workshop - August 4-5, 2005
Overriding a Method
• A subclass overrides a method contained
in its super class.
• Both methods should have the same
signature.
• Overriding a method allows the subclass
– to extend the method in the super-class and
– Modify the behavior in the super class as
befits the context of the subclass.
11
ACM/JETT Workshop - August 4-5, 2005
Overriding a Method
Example
withdraw( ) in super class
BankAccount successfully
withdraws the amount
if the amount <= balance.
withdraw () in subclass
CheckingAccount withdraws the
amount
if the amount <= balance or if the
amount <= balance +
overdraftProtection.
12
ACM/JETT Workshop - August 4-5, 2005
Inheritance
• private members in the super class are
not accessible in the subclass.
• protected members in the super class
– Are accessible in the subclass.
– Are not accessible outside the
package.
13
ACM/JETT Workshop - August 4-5, 2005
Inheritance – Some Examples
Car and Bicycle
override the method
move()
14
ACM/JETT Workshop - August 4-5, 2005
What is an abstract class?
Let us look at the classes, Shape, Circle and
Rectangle, where Circle and Rectangle are
both Shapes.
We know that a shape has
area, but we do not know
how to compute area unless
we know what kind of
concrete shape it is.
Then area() is an abstract
method in class Shape.
The class Shape itself is an
abstract class.
15
ACM/JETT Workshop - August 4-5, 2005
Abstract classes
• An abstract class cannot be
instantiated (no objects can be created
from this class).
• In Java, an abstract class must be
declared with the abstract keyword.
• An abstract class can contain one or
more abstract methods.
16
ACM/JETT Workshop - August 4-5, 2005
Abstract classes
• An abstract method has no method
body (definition), just a declaration with
method signature.
• Why have an abstract method?
• An abstract method specifies a
responsibility that the derived (subclasses)
classes should fulfill.
• The concrete subclasses of an abstract
class define the inherited abstract
methods.
17
ACM/JETT Workshop - August 4-5, 2005
Abstract classes and abstract
methods
The area() in Shape
class is declared, but
not defined. This is an
abstract method.
Class Shape is an
abstract class.
Circle and Rectangle
define the area()
Show
Shape classes
Example2_22
18
ACM/JETT Workshop - August 4-5, 2005
Mixing Object Types
Assume we have a class Car and a class BankAccount.
We have the following statements:
// Create an instance of a Car
Car myCar = new Car();
// Declare a variable of type BankAccount:
BankAccount myAcct;
//Assign myCar to myAcct.
myAcct = myCar; //A
compile-time error.
Why?
19
ACM/JETT Workshop - August 4-5, 2005
Mixing Object Types
myAcct = myCar;
The object types do not match in the
assignment statement.
20
ACM/JETT Workshop - August 4-5, 2005
Mixing Object Types
Let us look at a slightly different situation:
CheckingAccount cAcct = new
CheckingAccount ();
BankAccount myAcct;
myAcct = cAcct;
This assignment is OK, since an instance of a
CheckingAccount is also of type BankAccount
because (CheckingAccount is-a BankAccount).
What is the rule?
21
ACM/JETT Workshop - August 4-5, 2005
Substitutability
A variable defined to be of type base class
can reference an object of any of the
derived classes.
Therefore, the following assignments are
ok.
BankAccount myAcct;
myAcct = new CheckingAccount();
myAcct = new SavingsAccount();
22
ACM/JETT Workshop - August 4-5, 2005
Substitutability
Is the following assignment ok?
Here, we are assigning a variable of base
class type to a variable of type derived
class.
CheckingAccount cAcct;
cAcct = new BankAccount();
This will give a compile-time
error.
23
ACM/JETT Workshop - August 4-5, 2005
Substitutability
Given the Shape classes, are these following
statements legal?
Shape shape1 = new Shape();
shape1 = new Circle();
shape1 = new Rectangle();
Shape [] someShapes = new
Shape[3];
someShapes[0] = new Circle(5);
someShapes[1] = new
Rectangle(5,10);
24
ACM/JETT Workshop - August 4-5, 2005
Object – the ancestor of all Java classes
• All classes in Java inherit from one
common super class named Object.
• The Object class defines a set of basic
methods that all Java classes may need.
• Some of these are:
– clone()
– equals()
– toString()
• Classes typically override these methods
to implement their specific functionality.
25
ACM/JETT Workshop - August 4-5, 2005
Java interfaces
26
ACM/JETT Workshop - August 4-5, 2005
Interfaces
• An interface in Java is a “strict abstract
class” with only
– Method declarations
– No method definitions ie. no
implementations.
– Can also contain constants
• You cannot create an object from an
interface.
27
ACM/JETT Workshop - August 4-5, 2005
Interfaces
• A class can implement an interface (s).
• When a class implements an interface, it
should provide definitions for all methods
declared in the interface.
• One interface can extend another, but
– An interface cannot extend a class
– A class cannot extend an interface
– Classes implement an interface
28
ACM/JETT Workshop - August 4-5, 2005
Defining Interfaces
Define an interface called Taxable
public interface Taxable {
// A constant
public static final double
TAX_RATE = 0.1;
// A method declaration
public double computeTax();
}
29
ACM/JETT Workshop - August 4-5, 2005
Implementing interfaces
Class Stock implements the interface Taxable
public class Stock extends Asset
implements Taxable
{
public double computeTax(){
return ((stockPrice * numberOfStocks)
* Taxable.TAX_RATE)
}
private double stockPrice;
private int numberOfStocks;
}
30
ACM/JETT Workshop - August 4-5, 2005
Benefits of Interfaces
• Separates a specification from an
implementation.
• A Java interface is also a Java type.
Stock
someStock = new Stock();
• Is someStock of type Stock? Yes.
• Is someStock of type Taxable? Yes, since
class Stock implements Taxable interface.
31
ACM/JETT Workshop - August 4-5, 2005
Some Commonly used Java
interfaces
• Clonable
• Serializable
• Comparable, …
32
ACM/JETT Workshop - August 4-5, 2005
Dynamic Binding
• For this discussion we will again use the
BankAccount classes.
33
ACM/JETT Workshop - August 4-5, 2005
Static vs Dynamic Binding
• Suppose we have the following code:
CheckingAccount c1 = new
CheckingAccount();
• What is the type of the reference variable c1?
• It is CheckingAccount, as determined at compile
time.
• CheckingAccount is called the variable’s static
type.
34
ACM/JETT Workshop - August 4-5, 2005
Static vs Dynamic Binding
• Static binding is done by the compiler when
it can determine the type of an object
c1.withdraw();
This call to the withdraw() method will be bound
to the withdraw() defined in class
CheckingAccount.
35
ACM/JETT Workshop - August 4-5, 2005
Static vs Dynamic Binding
Now,let us change the code to the following:
BankAccount b;
b = new CheckingAccount();
• Is this assignment ok? Yes.
• What is the type of the reference variable b?
• It’s static type is BankAccount, as determined at
compile time.
• Its dynamic type is CheckingAccount as
determined at runtime.
36
ACM/JETT Workshop - August 4-5, 2005
Static vs Dynamic Binding
BankAccount b;
b = new CheckingAccount();
b.withdraw();
Is the call to the method,
withdraw() result in execution of
withdraw() in BankAccount or
withdraw() in CheckingAccount?
It will result in dynamically
binding to
CheckingAccount.withdraw().
37
ACM/JETT Workshop - August 4-5, 2005
Static vs Dynamic Binding
The Rule:
• Whenever a reference refers to an
interface or a base class, methods are
dynamically bound
• Dynamic Binding is method
implementation determined at runtime.
• Also known as Polymorphism
38
ACM/JETT Workshop - August 4-5, 2005
Checking an Object’s Type
• Its possible to check the actual type of an
object using the instanceof operator.
Example
BankAccount myAcct;
myAcct = new CheckingAccount();
If (myAcct instanceof
CheckingAccount )
….
39
ACM/JETT Workshop - August 4-5, 2005
Exercise
Consider the classes below:
40
ACM/JETT Workshop - August 4-5, 2005
Exercise
• Given the interface and classes on the
previous slide, are these following
statements valid?
Taxable [] assets = new Taxable[5];
assets[0] = new Stock();
assets[1] = new RealEstate();..
for (int i = 0;i < assets.length; ++i)
double d = assets[i].computeTax();
41
ACM/JETT Workshop - August 4-5, 2005
Casting
We know the following assignment is OK.
Taxable oneAsset = new Stock();
oneAsset.computeTax(); // Ok
oneAsset.getStockPrice();// Not Ok
// Cast it to Stock and then call
// method
if (oneAsset instanceof Stock)
((Stock)oneAsset).getStockPrice
();
42
ACM/JETT Workshop - August 4-5, 2005
Test your Understanding
• What is inheritance for?
• What is overriding a method?
• Can I assign an instance of a subclass to a variable of
type super class? Or, vice versa?
• What is an abstract class?
• What is an abstract method?
• What is an interface?
• What is dynamic binding?
• What is casting?
You will get some hands-on experience in using
some of these features in Lab 3
43
ACM/JETT Workshop - August 4-5, 2005