Interfaces

Interfaces are the next level of abstraction. An interface is like a class with nothing but abstract methods and final, static fields. All methods and fields of an interface must be public.

However, unlike a class, an interface can be added to a class that is already a subclass of another class. Furthermore an interface can apply to members of many different classes. For instance you can define an Import interface with the single method calculateTariff().

public interface Import {

  public double calculateTariff();

}

You might want to use this interface on many different classes, cars among them but also for clothes, food, electronics and moore. It would be inconvenient to make all these objects derive from a single class. Furthermore, each different type of item is likely to have a different means of calculating the tariff. Therefore you define an Import interface and declare that each class implements Import.

The syntax is simple. Import is declared public so that it can be accessed from any class. It is also possible to declare that an interface is protected so that it can only be implemented by classes in a particular package. However this is very unusual. Almost all interfaces will be public. No interface may be private because the whole purpose of an Interface is to be inherited by other classes.

The interface keyword takes the place of the class keyword. Line 3 looks like a classic method definition. It's public (as it must be). It's abstract, also as it must be. And it returns a double. The method's name is calculateTariff() and it takes no arguments. The difference between this method and a method in a class is that there is no method body. That remains to be created in each class that implements the interface.

You can declare many different methods in an interface. These methods may be overloaded. An interface can also have fields, but if so they must be final and static (in other words constants).


Previous | Next | Top | Cafe au Lait

Copyright 1997, 1998, 2000, 2005 Elliotte Rusty Harold
elharo@metalab.unc.edu
Last Modified March 2, 2005