java的面向抽象原则

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/andygras/article/details/78053071

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类的代码

没有更多推荐了,返回首页