You are on page 1of 45

1 / 45

COP 3503 FALL 2012


SHAYAN JAVED
LECTURE 6

Programming Fundamentals using Java


2 / 45

Interfaces
3 / 45

ANIMAL
picture
food
sleep()
roam()
makeNoise()
eat()
4 / 45

ANIMAL
picture
food
sleep()
roam()
makeNoise()
eat()

FELINE CANINE

roam() roam()
5 / 45

ANIMAL
picture
food
sleep()
roam()
makeNoise()
eat()

FELINE CANINE

roam() roam()

LION CAT WOLF DOG


makeNoise() makeNoise() makeNoise() makeNoise()
eat() eat() eat() eat()
6 / 45

Problem
 Need to add Pet behaviors to the pet animal
classes (Cat and Dog):

• play()
7 / 45

Option 1

Animal
 Add concrete methods:
play() to Animal class
Feline Canine

Lion Cat Wolf Dog


8 / 45

Option 1

Animal
 Add concrete methods:
play() to Animal class
Feline Canine

 What’s the problem?


Lion Cat Wolf Dog
9 / 45

Option 1

Animal
 Add concrete methods:
play() to Animal class
Feline Canine

 What’s the problem?


Lion Cat Wolf Dog
 Also exist for Lion/Wolf
10 / 45

Option 2

Animal
Add abstract methods: play()
to Animal class
Feline Canine

Lion Cat Wolf Dog


11 / 45

Option 2

Animal
Add abstract methods: play()
to Animal class
Feline Canine Provide empty body for it in
Lion and Wolf classes

Lion Cat Wolf Dog


12 / 45

Option 2

Animal
Add abstract methods: play()
to Animal class
Feline Canine Provide empty body for it in
Lion and Wolf classes

Lion Cat Wolf Dog Provide non-empty body for


it in Cat and Dog classes
13 / 45

Option 3

Animal
 Add concrete methods:
play() to Cat and Dog
classes
Feline Canine

Lion Cat Wolf Dog


14 / 45

What we need
 Pet behaviors just in Pet classes (like Dog and Cat)
15 / 45

What we need
 Pet behaviors just in Pet classes (like Dog and Cat)

 Consistency - Guarantee that all Pet classes use


the same signature for Pet methods
16 / 45

What we need
 Pet behaviors just in Pet classes (like Dog and Cat)

 Consistency - Guarantee that all Pet classes use


the same signature for Pet methods

 Take advantage of Polymorphism


17 / 45

Multiple Inheritance?

Animal Pet

Feline Canine

Lion Cat Wolf Dog


18 / 45

Multiple Inheritance?

Animal Pet

Feline Canine

Lion Cat Wolf Dog

But Java does not allow multiple inheritance! Why?


19 / 45

Multiple Inheritance?
 Not allowed

 Mainly to avoid complexity/confusion.

 Want to keep it simple.


20 / 45

The Diamond Problem


SuperClass
method()

A B
method() method()

C
21 / 45

The Diamond Problem


SuperClass
method()

A B
method() method()

What happens when method() is called in C?


22 / 45

Solution: Interfaces
Make Pet an interface and put all pet behaviors in it as abstract methods

Animal Pet
abstract play();

Feline Canine

Lion Cat Wolf Dog


23 / 45

Interfaces
 Classlike construct
• contains only constants and abstract methods.
24 / 45

Interfaces
 Classlike construct
• contains only constants and abstract methods.
• cannot contain variables or concrete methods.
25 / 45

Interfaces
 Classlike construct
• contains only constants and abstract methods.
• cannot contain variables or concrete methods.

 Declaration:
public interface <InterfaceName> {

// constant declarations;

// method signatures;
}
26 / 45

Interface Pet
public interface Pet {
public void play();
}
27 / 45

Implementing Pet interface


class Dog extends Canine implements Pet{

public void play(){


System.out.println(“Catch ball”);
}
}
28 / 45

Implementing Pet interface


class Dog extends Canine implements Pet{

public void play(){


System.out.println(“Catch ball”);
}
}

class Cat extends Feline implements Pet {

public void play(){


System.out.println(“Roll ball”);
}
}
29 / 45

Interface Characteristics
 Interfaces are defined in their own file
30 / 45

Interface Characteristics
 Interfaces are defined in their own file

 Methods are abstract. No implementations.


 May omit the abstract keyword.
31 / 45

Interface Characteristics
 Interfaces are defined in their own file

 Methods are abstract. No implementations.


 May omit the abstract keyword.

 Do not have instance fields.


32 / 45

Interface Characteristics
 Interfaces are defined in their own file

 Methods are abstract. No implementations.


 May omit the abstract keyword.

 Do not have instance fields.

 Can have constant fields. Automatically treated as


public, static, final; may omit any of these keywords
33 / 45

Example
public interface Interface1 {
int aNumber = 0;

public void aMethod();


}
34 / 45

Example
public interface Interface1 {
int aNumber = 0;

public void aMethod();


}

Same as:
public interface Interface1 {
public static final int aNumber = 0;

public abstract void aMethod();


}
35 / 45

Interface Characteristics
 A class can implement any number of interfaces

public class aClass implements I1, I2, I3 {

// methods from I1, I2, I3...

}
36 / 45

Interface Characteristics
 A class can implement any number of interfaces

public class aClass implements I1, I2, I3 {

// methods from I1, I2, I3...

 Interfaces can not be instantiated


37 / 45

Interface Characteristics
 A class can implement any number of interfaces

public class aClass implements I1, I2, I3 {

// methods from I1, I2, I3...

 Interfaces can not be instantiated

 But can be used as a data type for a variable


38 / 45

Using the interface


Pet[] pets = new Pet[2];
pet[0] = new Dog();
pet[1] = new Cat();

for(int i = 0; i < pets.length; i++)


pet[i].play();
39 / 45

Using the interface


Pet[] pets = new Pet[2];
pet[0] = new Dog();
pet[1] = new Cat();

for(int i = 0; i < pets.length; i++)


pet[i].play();

Similar to abstract classes – advantage of


polymorphism
40 / 45

Classes from different inheritance hierarchy can implement same interface!

Robot

Animal
Pet
abstract play();
Feline Canine

RoboDog Roomba

Lion Cat Wolf Dog


41 / 45

Abstract Classes vs. Interfaces

Variables Constructors Methods


Abstract No restrictions Constructors are invoked by subclasses No restrictions.
class through constructor chaining.
An abstract class cannot be instantiated
using the new operator.
Interface All variables No constructors. All methods must be
must be public public abstract
static final An interface cannot be instantiated using instance methods
the new operator.
42 / 45

Abstract Classes vs. Interfaces

Variables Constructors Methods


Abstract No restrictions Constructors are invoked by subclasses No restrictions.
class through constructor chaining.
An abstract class cannot be instantiated
using the new operator.
Interface All variables No constructors. All methods must be
must be public public abstract
static final An interface cannot be instantiated using instance methods
the new operator.
43 / 45

Abstract Classes vs. Interfaces

Variables Constructors Methods


Abstract No restrictions Constructors are invoked by subclasses No restrictions.
class through constructor chaining.
An abstract class cannot be instantiated
using the new operator.
Interface All variables No constructors. All methods must be
must be public public abstract
static final An interface cannot be instantiated using instance methods
the new operator.
44 / 45

Abstract Classes vs. Interfaces


 Cannot inherit from multiple classes but,
 Can can implement multiple interfaces

 Interfaces = model “can-do” type relationships


 Inheritance = model “is-a” type of relationship
45 / 45

Next Lecture
 More on interfaces

You might also like