java--具有多态性和封装的几何形状

时间:2017-07-07 17:18:41

标签: java polymorphism encapsulation

只是为了确保这是我的家庭作业。我需要实现类来计算几何形状的面积和周长。

我需要的概述:我将提供类似" java ShapeTest Rectangle 5 5"在命令行中,应该给出该矩形的面积和周长。

这是我的代码:

Shape.java

public abstract class Shape {
public abstract double area();
public abstract double perimeter();
}

Rectangle.java

public class Rectangle extends Shape {
private double b;
private double a;

public Rectangle(){

}

public Rectangle(double a, double b) {
    this.a = a;
    this.b = b;
}

@Override
public double area(){
    return a *b;
}

@Override
public  double perimeter(){
    return 2*(a+b);
}

@Override
public String toString() {
    return "Rectangle{" +
            "a=" + a +
            " b=" + b +
            '}';
}
}

我有类似的Circle,Triangle和Sqaure.java。 这是我的ShapeTest.java

public class FormenTest {


public static void set(){
//I want something here


}

public static void main(String[] args) {

    Rectangle rectangle = new Rectangle(Character.getNumericValue((args[1].charAt(0))),Character.getNumericValue((args[2].charAt(0))) );

    if(args[0].equals("Rectangle")){
        System.out.println(rectangle.area());

        }
    }
}

现在,这种做了所需要的但我不认为这是很好的方法。在ShapeTest类里面的set方法中,我想生成我稍后在main方法中使用的shape对象。任何有关优化代码和填充集方法的帮助都将受到赞赏。

1 个答案:

答案 0 :(得分:2)

您的主要方法可能如下所示:

public static Shape createShape(String[] args) {
    Shape s = null;
    if(args.length > 0) {
        switch(args[0]) {
            case "Rectangle":
                if(args.length > 2) {
                    s = new Rectangle(Double.parseDouble(args[1]), Double.parseDouble(args[2]));
                }
                break;
            case "Circle":
                if(args.length > 1) {
                    s = new Circle(Double.parseDouble(args[1]));
                }
                break;
            case "Triangle":
                //etc...
                break;
        }
    }
    return s;
}

public static void main(String[] args) {
    Shape s = createShape(args);

    if(s != null) {
        System.out.println("Area: " + s.area());
        System.out.println("Perimeter: " + s.perimeter());
    }
}

}

当然,您需要添加用户友好的异常处理。