Structuring Code by Using Abstract Classes and Interfaces

12
Copyright © 2007, Oracle. All rights reserved.

Objectives
After completing this lesson, you should be able to do the following: • Define abstract classes • Define abstract methods • Define interfaces • Implement interfaces

12-2

Copyright © 2007, Oracle. All rights reserved.

Abstract Classes
• • • An abstract class cannot be instantiated. Abstract methods must be implemented by subclasses. Interfaces support multiple inheritance with regard to type.
Abstract superclass

InventoryItem

Concrete subclasses

Movie

VCR

12-3

Copyright © 2007, Oracle. All rights reserved.

12-4

Copyright © 2007, Oracle. All rights reserved.

Creating Abstract Classes
Use the abstract keyword to declare a class as abstract.
public abstract class InventoryItem { private float price; public boolean isRentable()… }

public class Movie extends InventoryItem { private String title; public int getLength()…

public class Vcr extends InventoryItem { private int serialNbr; public void setTimer()…

12-5

Copyright © 2007, Oracle. All rights reserved.

Abstract Methods
• An abstract method:
– Is an implementation placeholder – Is part of an abstract class – Must be overridden by a concrete subclass

Each concrete subclass can implement the method differently.

12-6

Copyright © 2007, Oracle. All rights reserved.

12-7

Copyright © 2007, Oracle. All rights reserved.

Defining Abstract Methods
• Use the abstract keyword to declare a method as abstract:
– Provide the method signature only. – The class must also be abstract.

Why is this useful?
– You can declare the structure of a given class without providing complete implementation of every method.
public abstract class InventoryItem { public abstract boolean isRentable(); …

12-8

Copyright © 2007, Oracle. All rights reserved.

Defining and Using Interfaces
• An interface is like a fully abstract class:
– All its methods are abstract. – All variables are public static final.

• • •

An interface lists a set of method signatures without code details. A class that implements the interface must provide code details for all the methods of the interface. A class can implement many interfaces but can extend only one class.

12-9

Copyright © 2007, Oracle. All rights reserved.

Examples of Interfaces
• • • Interfaces describe an aspect of behavior that different classes require. For example, classes that can be steered support the “steerable” interface. Classes can be unrelated.

Nonsteerable
12-10

Steerable

Copyright © 2007, Oracle. All rights reserved.

Creating Interfaces
• Use the interface keyword:
public interface Steerable { int MAXTURN = 45; void turnLeft(int deg); void turnRight(int deg); }

• •

All methods are public abstract. All variables are public static final.

12-11

Copyright © 2007, Oracle. All rights reserved.

12-12

Copyright © 2007, Oracle. All rights reserved.

Implementing Interfaces
Use the implements keyword:
public class Yacht extends Boat implements Steerable { public void turnLeft(int deg) {…} public void turnRight(int deg) {…} }

12-13

Copyright © 2007, Oracle. All rights reserved.

Sort: A Real-World Example
• • • • • Is used by several unrelated classes Contains a known set of methods Is needed to sort any type of object Uses comparison rules that are known only to the sortable object Supports good code reuse

12-14

Copyright © 2007, Oracle. All rights reserved.

Overview of the Classes
• Created by the sort expert:
public interface Sortable public abstract class Sort

Created by the movie expert:
public class MyApplication

public class Movie implements Sortable

12-15

Copyright © 2007, Oracle. All rights reserved.

12-16

Copyright © 2007, Oracle. All rights reserved.

How the Sort Works
MyApplication sortObjects() returns the sorted list. MyApplication passes an array of movies to Sort.sortObjects().

4

1

Sort The movie returns the result of the comparison. 3 Movie sortObjects() asks a movie to 2 compare itself with another movie.

12-17

Copyright © 2007, Oracle. All rights reserved.

Sortable Interface
Specifies the compare()method:
public interface Sortable { // compare(): Compare this object to another object // Returns: // 0 if this object is equal to obj2 // a value < 0 if this object < obj2 // a value > 0 if this object > obj2 int compare(Object obj2); }

12-18

Copyright © 2007, Oracle. All rights reserved.

Sort Class
Holds sortObjects():
public abstract class Sort { public static void sortObjects(Sortable[] items) { // Step through the array comparing and swapping; // do this length-1 times for (int i = 1; i < items.length; i++) { for (int j = 0; j < items.length - 1; j++) { if (items[j].compare(items[j+1]) > 0) { Sortable tempitem = items[j+1]; items[j+1] = items[j]; items[j] = tempitem; } } } } }

12-19

Copyright © 2007, Oracle. All rights reserved.

Movie Class
Implements Sortable:
public class Movie extends InventoryItem implements Sortable { String title; public int compare(Object movie2) { String title1 = this.title; String title2 = ((Movie)movie2).getTitle(); return(title1.compareTo(title2)); } }

12-20

Copyright © 2007, Oracle. All rights reserved.

Using the Sort
Call Sort.sortObjects(Sortable []) with an array of Movie as the argument:
class myApplication { Movie[] movielist; … // build the array of Movie Sort.sortObjects(movielist); }

12-21

Copyright © 2007, Oracle. All rights reserved.

Using instanceof with Interfaces
• • Use the instanceof operator to determine whether an object implements an interface. Use downcasting to call methods that are defined in the interface:
public void aMethod(Object obj) { … if (obj instanceof Sortable) ((Sortable)obj).compare(obj2); }

12-22

Copyright © 2007, Oracle. All rights reserved.

Summary
In this lesson, you should have learned the following: • An abstract class cannot be instantiated. • An abstract method has a signature but no code. • An interface is a collection of abstract methods to be implemented elsewhere. • A class can implement many interfaces. • Implementing more than one interface is comparable to multiple inheritance.

12-23

Copyright © 2007, Oracle. All rights reserved.

Practice 12: Overview
This practice covers the following topics: • Creating an interface and abstract class • Implementing the java.lang.Comparable interface to sort objects • Testing the abstract and interface classes

12-24

Copyright © 2007, Oracle. All rights reserved.

12-25

Copyright © 2007, Oracle. All rights reserved.

12-26

Copyright © 2007, Oracle. All rights reserved.

12-27

Copyright © 2007, Oracle. All rights reserved.

12-28

Copyright © 2007, Oracle. All rights reserved.

12-29

Copyright © 2007, Oracle. All rights reserved.

12-30

Copyright © 2007, Oracle. All rights reserved.

Sign up to vote on this title
UsefulNot useful