定义一个interface

  一个接口的定义是由 修饰词(modifiers),关键词 interface, 接口名称,由逗号分隔开的父接口(parent interfaces),和接口实体(interface body)。

  例子如下:

    public interface GroupedInterface extends Interface1, Interface2, Interface3 { 
    // constant declarations 
    // base of natural logarithms 
        double E = 2.718282; 
    // method signatures  
        void doSomething (int i, double x); 
        int doSomethingElse(String s); 
    }

  Public规定了这个接口可以被任何包中的任何类所使用。如果你声明这个接口是public的,它只能被同一个包里的类所使用。

  一个接口可以继承其它接口,像一个类能后继承其它类一样。但是类只能继承一个父类,而接口却可以继承任何数目的接口。

  接口实体(interface body)

  接口实体中含有它所包含的所有方法的声明。每个声明都以引号为结束,因为接口不用实现它所声明的方法。接口中所有的方法都默认是public的,因此修饰词public可以被省略。

  接口还可以声明常量。同样的,常量的修饰词public, static和final可以被省略。

  接口的实现

  为了声明某个类实现了某个接口,你需要在类的声明中使用implements。你的类可以实现多个接口,所以implements关键词后面可以跟随多个由逗号分隔的接口名称。为了方便,implements关键词多跟在extends关键词的后面。

  一个接口实例—Relatable

  Relatable是一个用来比较两个对象大小的接口。

    public interface Relatable { 
        // this (object calling isLargerThan) 
        // and other must be instances of  
        // the same class returns 1, 0, -1  
        // if this is greater // than, equal  
        // to, or less than other 
        public int isLargerThan(Relatable other); 
    }

  如果你想比较两个相似的对象的大小,不管该对象属于什么类,这个类需要实现Relatable接口。

  只要有办法可以比较对象的相对大小,任何类都可以实现Relatable接口。对字符串来说,可以比较字符数;对书来说,可以比较页数;对学生来说,可以比较体重。对平面几何对象来说,比较面积是很好的选择;对三维对象来说,需要比较体积了。所有以上的类都能实现int isLargerThan()方法。

  如果你知道某个类实现了Relatable接口,你可以比较从这个类实例化的对象了。

  Relatable接口的实现

  下面是一个三角形类,它实现了Relatable接口。

    public class RectanglePlus 
        implements Relatable { 
        public int width = 0; 
        public int height = 0; 
        public Point origin; 
        // four constructors 
        public RectanglePlus() { 
            origin = new Point(0, 0); 
        } 
        public RectanglePlus(Point p) { 
            origin = p; 
        } 
        public RectanglePlus(int w, int h) { 
            origin = new Point(0, 0); 
            width = w; 
            height = h; 
        } 
        public RectanglePlus(Point p, int w, int h) { 
            origin = p; 
            width = w; 
            height = h; 
        } 
        // a method for moving the rectangle 
        public void move(int x, int y) { 
            origin.x = x; 
            origin.y = y; 
        } 
        // a method for computing 
        // the area of the rectangle 
        public int getArea() { 
            return width * height; 
        } 
        // a method required to implement 
        // the Relatable interface 
        public int isLargerThan(Relatable other) { 
            RectanglePlus otherRect  
                = (RectanglePlus)other; 
            if (this.getArea() < otherRect.getArea()) 
                return -1; 
            else if (this.getArea() > otherRect.getArea()) 
                return 1; 
            else
                return 0; 
        } 
    }