原文出自 http://www.cnblogs.com/ggjucheng/archive/2012/12/04/2802265.html
英文出自 http://docs.oracle.com/javase/tutorial/java/IandI/usinginterface.html
聲明一個類實現介面,要在類聲明中包含一個implements語句。類可以實現多個介面,所以implements關鍵字尾隨一個逗號隔開的由該類實現的介面。按照慣例,如果有父類繼承,implements語句尾隨extend語句。
一個簡單的介面,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。對於strings,它可以比較字元的個數,對於書,可以比較頁數,對於學生,可以比較體重等等。對於平面的幾何對象,面積將是一個不錯的選擇(見下面的RectanglePlus類的),對於三維幾何對象可以使用體積對比。所有這些類可以實現isLargerThan()方法。
實現Relatable 介面
這裡是一個Rectangle介面的實現:
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; }}
因為RectanglePlus實現了Relatable
,所以任何兩個RectanglePlus對象都可以比較大小
注意:Relatable介面定義的方法isLargerThan,只能接受Relatable
類型的對象。轉換other為RectanglePlus執行個體的那行代碼。類型轉換告訴編譯器,對象實際是什麼類型。直接調用other執行個體的other.getArea()方法將會失敗,因為編譯器不知道other真正是RectanglePlus
執行個體。