面向抽象编程
public abstract class Geometry {
public abstract double getArea();
}
public class Pillar{
Geometry bottom; //bottom是抽象类Geometry声明变量
double height;
public Pillar(Geometry bottom,double height) {
this.bottom=bottom;
this.height=height;
}
public double getVolume() {
if(bottom==null){
System.out.println("没有底,无法计算体积");
return -1;
}
return bottom.getArea()*height; //bottom可以调用子类重写的getArea方法
}
}
public class Circle extends Geometry{
double r;
Circle(double r) {
this.r=r;
}
public double getArea() {
return (3.14*r*r);
}
}
public class Rectangle extends Geometry {
double a,b;
public Rectangle(double a,double b) {
this.a=a;
this.b=b;
}
public double getArea(){
return a*b;
}
}
public class Application {
public static void main(String[] args) {
Pillar pillar;
Geometry bottom=null;
pillar=new Pillar(bottom,10); //null底的柱体
System.out.println("体积"+pillar.getVolume());
bottom=new Rectangle(12,22);
pillar =new Pillar(bottom, 58); //pillar三具有矩形底的柱体
System.out.println("体积"+pillar.getVolume());
bottom =new Circle(10);
pillar=new Pillar(bottom, 58); //pillar是具有圆形底的柱体
System.out.println("体积"+pillar.getVolume());
}
}
