標籤:
/* *建立的抽象類別,把這個抽象類別交給別人,別人的類需要繼承該抽象類別*求得一個立體的底面積,但是我們可以不用管別人是怎麼這個底面積的。 */package com.pan.e1;/** * * 屬於雨靈的夜 */public abstract class Gemetry { public abstract double getArea();}
- 因為我們希望代碼能實現各種類型的體積,所以我們把需要經常變化的底面積作為抽象類別,讓它作為它的子類的上轉類型。
/**面向抽像類,設計主體功能*Gemetry類和Volume類就是我們自己實現的,目的是為了計算體積。 */package com.pan.e1;/** * * 屬於雨靈的夜 */public class Volume { Gemetry botton; double height; public Volume(Gemetry botton , double height){ this.botton=botton; this.height=height; } void changeBotton(Gemetry botton){ this.botton=botton; } public double getVolume(){ return botton.getArea()*height; }}
- 求體積的類,但在這個類裡我們並沒有把要求的物體形狀寫死,而是通過抽象類別來實現底面的計算,這樣各種不同子類繼承抽象類別從而實現多種形狀的
- 體積的計算。讓我們的代碼更加健壯強大。
/* * 乙為我們實現求三角形的面積,因為底面是個四邊形,所以我們求得的是稜柱體的體積 */package com.pan.e1;/** * * 屬於雨靈的夜 */public class Lader extends Gemetry { double a,b,h; public Lader(double a,double b,double h){ this.a=a; this.b=b; this.h=h; } public double getArea(){ return(0.5*(a+b)*h); }}
/* *甲為我們實現求圓的面積,因為底面是個圓,所以求是求的圓柱體積 */package com.pan.e1;/** * * 屬於雨靈的夜 */public class Circle extends Gemetry { private double r; public Circle(double r){ this.r=r; } public double getArea(){ return (3.14*r*r); }}
/* *測試我們寫的兩個類:Gemetry和Volume*現在如果別人幫我們實現圓柱體的底面積,我們就可以計算圓柱體的體積了。 */package com.pan.e1;/** * * 作者;屬於雨靈的夜 */public class Main { public static void main(String[] args){ Volume v1; Gemetry g; g=new Lader(2,2,10); System.out.println("梯形的面積"+g.getArea()); v1=new Volume(g,58); System.out.println("梯形底的柱體的體積"+v1.getVolume()); g=new Circle(2.0); System.out.println("圓的面積"+g.getArea()); v1=new Volume(g,4.0); System.out.println("圓柱體的體積"+v1.getVolume()); }}
通過編寫不同的類繼承Gemetry抽象類別,我們就可以實現不通的形狀的立體的體積,而我們之前的代碼不需要任何的變動。
通過利用上轉類型,我們可以面向抽象來編程,可以在前期專註於程式的邏輯設計,然後到後面再用子類繼承抽象類別或者介面來
實現具體的功能,或者子類的編寫可以交給別人來寫,達到並行開發軟體的效果,從而提高軟體的開發速度,也許這就是團隊開發軟體時採取的方法吧。
這就是物件導向編程!!!
java面向抽象編程,可以讓程式員專註於程式的邏輯結構設計