/* *建立的抽象类,把这个抽象类交给别人,别人的类需要继承该抽象类 *求得一个立体的底面积,但是我们可以不用管别人是怎么这个底面积的。 */ 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抽象类,我们就可以实现不通的形状的立体的体积,而我们之前的代码不需要任何的变动。
通过利用上转类型,我们可以面向抽象来编程,可以在前期专注于程序的逻辑设计,然后到后面再用子类继承抽象类或者接口来
实现具体的功能,或者子类的编写可以交给别人来写,达到并行开发软件的效果,从而提高软件的开发速度,也许这就是团队开发软件时采取的方法吧。
这就是面向对象编程!!!
时间: 2024-10-14 17:02:24