Defining Interfaces





No interfaces, only classes!





The form of an interface is


public interface <name> extends <name>{


    <final variables>


    <method headers>



The extension of another interface is optional.  A method header is terminated with a semicolon.


In the next example, the interface TrueStack is defined for all implementations that restrict operations to the standard ones on stacks.  Because TrueStack extends Iterable, each implementation must also include an iterator method, and each stack can be traversed with an enhanced for loop.


The code for this interface would be placed in its own source file, named  This file can be compiled before any implementing classes are defined.


Example interface:


public interface TrueStack<E> extends Iterable<E>{


    public boolean isEmpty();


    public E peek();


    public E pop();


    public void push(E element);


    public int size();



Each implementing class would in turn be placed in its own file.  An interface must be successfully compiled before any of its implementing classes.


Example implementation, based on an ArrayList:


import java.util.*;


public class ArrayStack<E> implements TrueStack<E>{


    private List<E> list;


    public ArrayStack(){

        list = new ArrayList<E>();



    public boolean empty(){

        return list.isEmpty();



    public E peek(){

        return list.get(list.size() - 1);



    public E pop(){

        return list.remove(list.size() - 1);



    public void push(E element){




    public int size(){

        return list.size();



    public Iterator<E> iterator(){

        return null;                 # Deferred to another

    }                                # topic