標籤:nbsp ext tco ble circle ima stat sqrt sys
關於介面
介面描述了實現了它的類擁有什麼功能。因為Java是強型別的,所以有些操作必須用介面去約束和標記。介面作為類的能力的證明,它表明了實現了介面的類能做什麼。
介面中的成員
介面中的所有的成員,預設情況下都是public的,也必須是public,無論是方法,還是欄位。因為介面就是規定了API,如果實現的類不公開介面中的API,怎麼能叫API呢?
介面中可以 定義方法 和 欄位。
介面中的欄位,預設(也是必須)為 public static final 。在定義的介面中必須初始化,因為是final。它們將成為類中的靜態常量欄位
介面中的方法,預設(也是必須)為 public abstract 。只需在介面中定義即可,不能實現(讓實現了介面的類去實現)。將成為類中的public 執行個體方法 , 實現了介面的類必須實現介面中定義的方法。
介面和類之間的implements關係
介面就是用來被實現implements 的 ,不然定義介面也就沒意義了。Java中的類只能繼承一個父類,但是可以實現多個介面。除了抽象類別,普通類必須實現介面中定義的所有方法。
當一個類實現了某個介面後,介面可以看做是 是實現了介面的類 的 父類。利用多態的特性,我們往往選擇面向介面編程,而不是面向具體的類,這樣可以讓程式員關注API而不是內部實現,並提供更大的靈活性。
public class Test { public static void main(String[] args) { Shape[] shapes = { new Rectangle(5,6), new Triangle(3, 4, 5), new Triangle(6, 8, 10) }; double totalArea =0; double totalCircle =0; for(Shape s:shapes) { totalArea += s.getArea(); totalCircle += s.getCircle(); } System.out.println("totalArea:"+totalArea); System.out.println("totalCircle:"+totalCircle); System.out.println( new Triangle(3,4,5) instanceof Shape); //true }}interface Shape{ double getArea(); double getCircle();}class Rectangle implements Shape{ Rectangle(int w,int h) { width = w; height =h; } private int width; private int height; @Override public double getArea() { return height*width; } @Override public double getCircle() { return 2*(height+width); } }class Triangle implements Shape{ Triangle(int a,int b,int c) { e1 = a; e2 = b; e3 = c; } private int e1; private int e2; private int e3; @Override public double getArea() { double p = (e1+e2+e3)/2.0; double area= Math.sqrt(p*(p-e1)*(p-e2)*(p-e3)); return area; } @Override public double getCircle() { return e1+e2+e3; } }
抽象類別於介面
java集合架構中的例子
介面和介面之間的extends關係
介面可以擴充extends 已經存在的介面,如果介面A擴充了介面B,則A將繼承B中的所有成員,就像他們定義在A中一樣。一個介面可以擴充多個介面。
interface Shape{ double getArea(); double getCircle();}interface Color{ void setColor(int color); void getColor();}interface Rectangle extends Shape , Color{ double getWidth(); double getHeight(); }
這樣,一個類如果要實現Rectangle 介面,就必須實現 上面的6個方法。
介面的總結
1、介面不能new出執行個體。但可以定義介面類型的變數,去引用實現了這個介面的類的對象。此時介面相當於實作類別的父類。
2、介面中的方法不實現,而是用一個 分好 ; 代替函數體。
3、介面是Java中的一種參考型別。
java中的介面interface