Start of Tutorial > Start of Trail > Start of Lesson |
Search
Feedback Form |
This section shows you how to create and to use interfaces and talks about why you would use an interface instead of a class.An interface defines a protocol of behavior that can be implemented by any class anywhere in the class hierarchy. An interface defines a set of methods but does not implement them. A class that implements the interface agrees to implement all the methods defined in the interface, thereby agreeing to certain behavior.
Definition: An interface is a named collection of method definitions (without implementations). An interface can also declare constants.
Because an interface is simply a list of unimplemented, and therefore abstract, methods, you might wonder how an interface differs from an abstract class. The differences are significant.
- An interface cannot implement any methods, whereas an abstract class can.
- A class can implement many interfaces but can have only one superclass.
- An interface is not part of the class hierarchy. Unrelated classes can implement the same interface.
Let's set up the example we'll be using in this section. Suppose that you have written a class that can watch stock prices coming over a data feed. This class allows other classes to register to be notified when the value of a particular stock changes. First, your class, which we'll call
StockMonitor
, would implement a method that lets other objects register for notification:
public class StockMonitor { public void watchStock(StockWatcher watcher, String tickerSymbol, double delta) { ... } }The first argument to this method is a
StockWatcher
object.StockWatcher
is the name of an interface whose code you will see in the next section. That interface declares one method:valueChanged
. An object that wants to be notified of stock changes must be an instance of a class that implements this interface and thus implements thevalueChanged
method. The other two arguments provide the symbol of the stock to watch and the amount of change that the watcher considers interesting enough to be notified of. When theStockMonitor
class detects an interesting change, it calls thevalueChanged
method of the watcher.The
watchStock
method ensures, through the data type of its first argument, that all registered objects implement thevalueChanged
method. It makes sense to use an interface data type here because it matters only that registrants implement a particular method. IfStockMonitor
had used a class name as the data type, that would artificially force a class relationship on its users. Because a class can have only one superclass, it would also limit what type of objects can use this service. By using an interface, the registered objects class could be anything--Applet
orThread
--for instance, thus allowing any class anywhere in the class hierarchy to use this service.
Start of Tutorial > Start of Trail > Start of Lesson |
Search
Feedback Form |