java的面向抽象原则
- 未使用抽象原则
圆面积的计算
Circle.java
public class Circle {
double r;
Circle(double r){
this.r = r;
}
public double getArea(){
return 3.14*r*r;
}
}
圆柱体体积计算
public class Pillar {
Circle bottom;
double height;
Pillar(Circle bottom,double height){
this.bottom = bottom;
this.height = height;
}
public double getVolume(){
return bottom.getArea()*height;
}
}
矩形面积
public class Recatangle {
double a,b;
Recatangle(double a,double b){
this.a = a;
this.b = b;
}
public double getArea(){
return a*b;
}
}
测试函数
public class Applavation {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Circle circle = new Circle(5);
System.out.println("圆的面积为"+circle.getArea());
Circle bottom = new Circle(5);
Pillar pillar = new Pillar(bottom,10);
System.out.println("圆柱的体积为"+pillar.getVolume());
Recatangle recatangle = new Recatangle(2,3);
System.out.println("矩形的面积为"+recatangle.getArea());
}
}
- 使用抽象类
几何类函数
public abstract class Geometry {
public abstract double getArea();
}
圆的面积
public class Circle extends Geometry {
double r;
Circle(double r){
this.r = r;
}
public double getArea(){
return 3.14*r*r;
}
}
圆柱体体积
public class Pillar {
Geometry bottom; // bottom为抽象类Geomtry的声明
double height;
Pillar(Geometry bottom, double height) {
this.bottom = bottom;
this.height = height;
}
public double getVolume() {
return bottom.getArea() * height;
}
}
矩形面积
public class Rectangle extends Geometry { //通过使用接口来定义Geometry
double a,b;
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) {
// TODO 自动生成的方法存根
Pillar pillar;
Geometry bottom;
bottom = new Rectangle(2,3);
pillar = new Pillar(bottom,4);
System.out.println("长方体体积"+pillar.getVolume());
bottom = new Circle(2);
pillar = new Pillar(bottom,4);
System.out.println("圆柱体体积"+pillar.getVolume());
}
}
通过使用面向抽象来设计,使得添加其他Geometry子类时,不需要修改Pillar类的代码