關於Java的介面
其實剛開始聽到介面的時候不解其意,為什麼要有介面這個東西,加之老師上課我可能沒仔細聽(或者時間長了忘了?),這次看到了“用介面設計並實現圓,三角形,矩形的面積與周長計算”這個題目的程式碼,它將介面定義在了原始碼最首的部分,並且是定義成了抽象類。
interface Shape{ public abstract double getArea(); public abstract double getCircumference(); }
接下來是全部的程式碼(來源於百度):
package javaapplication3;import java.util.Scanner; interface Shape{ public abstract double getArea(); public abstract double getCircumference(); } class Circle implements Shape { private double r=0; public Circle(double r) { this.r=r;} public double getR(){ return this.r; } public double getArea() { return (3.14*this.r*this.r);} public double getCircumference(){ return 2*3.14*this.r; } } class Triangle implements Shape { private double a=0; private double b=0; private double c=0; public Triangle(double a, double b, double c) { this.a=a; this.b=b; this.c=c;} public double getA() { return this.a;} public double getB() { returnthis.b;} public double getC() { return this.c;} public double getArea() { // 根據海倫公式求三角形的面積 double p=(a+b+c)/2; return Math.pow(p*(p-a)*(p-b)*(p-c),0.5);} public double getCircumference(){ return this.a+this.b+this.c; } } class Rentangle implements Shape{ public double height=0; public double width=0; public Rentangle(double height, double width){ this.height = height; this.width = width;} public double getHeight(){ return this.height; } public double getWidth(){ return this.width;} public double getArea(){ return this.height*this.width; } public double getCircumference(){ return 2*(this.height+this.width); } } public class testshape { public static void main(String[] args){ Scanner input = new Scanner(System.in); double r=0; double a=0; double b=0; double c=0; double height=0; double width=0; do{ System.out.println("請輸入圓的半徑r:"); r= input.nextDouble(); if (r<=0) { System.out.print("輸入錯誤!!!"); } }while (r<=0); do { System.out.println("請輸入三角形的三條邊a、b、c:"); a= input.nextDouble(); b= input.nextDouble(); c= input.nextDouble(); if (a<0||b<0||c<0||a+b<=c||a-b>=c) { System.out.print("輸入錯誤!!!"); } } while ((a<0||b<0||c<0||a+b<=c||a-b>=c)); do { System.out.println("請輸入矩形的長和寬height、width:"); height= input.nextDouble(); width= input.nextDouble(); if (height<=0||width<=0) { System.out.print("輸入錯誤!!!"); } } while (height<=0||width<=0); Circle C=new Circle(r); Triangle T=new Triangle(a,b,c); Rentangle R=new Rentangle(height,width); System.out.println("******圓*******"); System.out.println("半徑: " + C.getR()); System.out.println("面積 : " + C.getArea()); System.out.println("周長 : " + C.getCircumference()); System.out.println("*******三角形*******"); System.out.println("三邊為: " + T.getA()+","+T.getB()+","+T.getC()); System.out.println("面積 : " + T.getArea()); System.out.println("周長 : " + T.getCircumference()); System.out.println("*******矩形*******"); System.out.println("長: " + R.getHeight()); System.out.println("寬: " + R.getWidth()); System.out.println("面積 : " + R.getArea()); System.out.println("周長 : " + R.getCircumference()); } }
java的介面的用處主要體現在下面幾個方面:
(1)通過介面可以實現不相關類的相同行為,而不需要了解物件所對應的類。
(2)通過介面可以指明多個類需要實現的方法。
(3)通過介面可以瞭解物件的互動介面,而不需瞭解物件所對應的類。
類描述了一個實體,包括實體的狀態,也包括實體可能發出的動作。
介面定義了一個實體可能發出的動作。但是隻是定義了這些動作的原型,沒有實現,也沒有任何狀態資訊。
所以介面有點象一個規範、一個協議,是一個抽象的概念;而類則是實現了這個協議,滿足了這個規範的具體實體,是一個具體的概念。
從程式角度,簡單理解,介面就是函式更新,類就是函式實現。需要注意的是同一個宣告可能有很多種實現。
1、介面中定義類方法的原型,但是不能說是空方法,因為空方法的意思是有實現體,只不過實現體是空操作。實際上介面沒有定義任何實現體。具體的實現體都是在實現介面的類中,介面只是定義了這些方法的呼叫方式。
你當然也可以不用介面,直接在類裡面寫方法,但是如果你的一組方法需要在很多類裡實現,那麼把它們抽象出來,做成一個介面規範,不是更好麼?
2、一個類描述了一個實體,這個實體可能是一個複雜的物件,它的動作很多,如果把這些動作分類,用介面a定義其中的某一組動作,介面b定義其中的另外一組動作,這樣的結構,比較清楚。
這種方式具備了多繼承的優點,避免了多繼承的缺陷。實際上在歷史上,介面在很大程度上,是為了解決多繼承帶來的種種問題而設計出來的。
3、包中那些已定義的介面,怎麼知道那裡面定義了什麼方法。
接口裡定義了方法的輸入輸出,這些都是協議,具體的實現都在每個類中。對於很多隻需要抽象介面的地方,不需要知道具體的類是什麼,只要這個類實現了這個介面就可以了。