cop 3503 fall 2012 shayan javed lecture 6

Post on 22-Feb-2016

31 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

COP 3503 FALL 2012 Shayan Javed Lecture 6. Programming Fundamentals using Java. Interfaces. Animal picture food sleep() roam() makeNoise () eat(). Animal picture food sleep() roam() makeNoise () eat(). Canine roam(). Feline roam(). Animal picture food sleep() roam() - PowerPoint PPT Presentation

TRANSCRIPT

1 / 45

COP 3503 FALL 2012SHAYAN JAVED

LECTURE 6

Programming Fundamentals using Java

1

2 / 45

Interfaces

3 / 45

ANIMALpicturefoodsleep()roam()makeNoise()eat()

4 / 45

ANIMALpicturefoodsleep()roam()makeNoise()eat()

FELINE

roam()

CANINE

roam()

5 / 45

ANIMALpicturefoodsleep()roam()makeNoise()eat()

FELINE

roam()

CANINE

roam()

LIONmakeNoise()eat()

CATmakeNoise()eat()

WOLFmakeNoise()eat()

DOGmakeNoise()eat()

6 / 45

Problem

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

• play()

7 / 45

Option 1

Add concrete methods: play() to Animal class

Animal

Feline Canine

Lion Cat Wolf Dog

8 / 45

Option 1

Add concrete methods: play() to Animal class

What’s the problem?

Animal

Feline Canine

Lion Cat Wolf Dog

9 / 45

Option 1

Add concrete methods: play() to Animal class

What’s the problem?

Also exist for Lion/Wolf

Animal

Feline Canine

Lion Cat Wolf Dog

10 / 45

Option 2

Add abstract methods: play() to Animal classAnimal

Feline Canine

Lion Cat Wolf Dog

11 / 45

Option 2

Add abstract methods: play() to Animal class

Provide empty body for it in Lion and Wolf classes

Animal

Feline Canine

Lion Cat Wolf Dog

12 / 45

Option 2

Add abstract methods: play() to Animal class

Provide empty body for it in Lion and Wolf classes

Provide non-empty body for it in Cat and Dog classes

Animal

Feline Canine

Lion Cat Wolf Dog

13 / 45

Option 3

Add concrete methods: play() to Cat and Dog classes

Animal

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

Feline Canine

Lion Cat Wolf Dog

Pet

18 / 45

Multiple Inheritance?

Animal

Feline Canine

Lion Cat Wolf Dog

Pet

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

method()B

method()

C

21 / 45

The Diamond Problem

SuperClass

method()

A

method()B

method()

C

What happens when method() is called in C?

22 / 45

Solution: Interfaces

Animal

Feline Canine

Lion Cat Wolf Dog

Petabstract play();

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

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

Animal

Feline Canine

Lion Cat Wolf Dog

Petabstract play();

Robot

RoboDog Roomba

Classes from different inheritance hierarchy can implement same interface!

41 / 45

Abstract Classes vs. Interfaces

Variables Constructors Methods

Abstract class

No restrictions Constructors are invoked by subclasses through constructor chaining.

An abstract class cannot be instantiated using the new operator.

No restrictions.

Interface All variables must be public static final

No constructors.

An interface cannot be instantiated using the new operator.

All methods must be public abstract instance methods

42 / 45

Abstract Classes vs. Interfaces

Variables Constructors Methods

Abstract class

No restrictions Constructors are invoked by subclasses through constructor chaining.

An abstract class cannot be instantiated using the new operator.

No restrictions.

Interface All variables must be public static final

No constructors.

An interface cannot be instantiated using the new operator.

All methods must be public abstract instance methods

43 / 45

Abstract Classes vs. Interfaces

Variables Constructors Methods

Abstract class

No restrictions Constructors are invoked by subclasses through constructor chaining.

An abstract class cannot be instantiated using the new operator.

No restrictions.

Interface All variables must be public static final

No constructors.

An interface cannot be instantiated using the new operator.

All methods must be public abstract instance methods

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

top related