在对象数组中选择特定对象

时间:2017-05-26 17:04:35

标签: java arrays object

public abstract class ShapeClass {
    private double area;

    CONSTRUCTORS
    MUTATORS, ACCESSORS

    public abstract double calcArea();
}

public class CircleClass extends ShapeClass {
    private int diameter;
    private double area;

    public CircleClass() {
        super();
        diameter = 10;
    }

    public CircleClass(CircleClass inCircle) {
        super(inCircle);
        diameter = inCircle.getDiameter();
    }

    public CircleClass(int inDiameter) {
        setDiameter(inDiameter);
        area = calcArea();
        super.setArea(area);
    }

    public void setDiameter(int inDiameter) {
        if(validateInt(inDiameter)) {
            diameter = inDiameter;
        } else {
            throw new IllegalArgumentException("invalid diameter");
        }
    }

    public int getDiameter() {
        return diameter;
    }

    public boolean equals(int inDiameter) {
        return(diameter == inDiameter);
    }

    public boolean equals(Object inObj) {
        boolean same = false;
        if(inObj instanceof CircleClass) {
            CircleClass inCircle = (CircleClass)inObj;
            if(super.equals(inCircle)) {
                if(diameter == inCircle.getDiameter()) {
                    same = true;
                }
            }
        }

        return same;
    }

    public String toString() {
        return (" area of circle is: " + super.toString());
    }

    private boolean validateInt(int inDiameter) {
        boolean valid = false;
        if (inDiameter>0) {
            valid = true;
        }
        return valid;
    }

    private boolean validateReal(double inArea) {
        boolean valid = false;
        if(inArea>0.0) {
            valid = true;
        }
        return valid;
    }

    @Override
    public double calcArea() {
        double radius;
        radius = ((double) diameter) / 2.0;
        area = Math.PI * radius * radius;
        return area;
    }
}

这是我ShapeClass的代码。我有两个其他类RectangleTriangle,它们与CircleClass几乎相同。

在另一个类中,我在数组中分配ShapeClass个对象。

如果我这样做它会像shape [3] = {Shape Object,Shape Object,Shape Object}。我不知道这是不对的,我是java的新手。对不起,如果有任何混淆。

我的问题是,如果我这样做,我如何区分哪个对象是CircleRectangle还是Triangle?当我想打印出一个圆形物体时?

感谢您的帮助。

4 个答案:

答案 0 :(得分:0)

您可以使用openssl x509 -pubkey -noout -in cert.pem > pubkey.pem

进行检查
instanceof

答案 1 :(得分:0)

所以在java中有一个运算符 - 实例:

if(shapeObject instanceof Circle){
  //print
}

因此您可以使用它来按类型区分对象。另外,关于它是否正确的问题:您可以使用此方法创建父对象类型数组并将子项放入其中。之后,如果从该数组的每个对象上调用 toString 方法,将调用该方法的特定实现。例如,如果此数组中有Circle对象并且其中包含重写的 toString 方法,则在调用ShapeObject数组中的对象 toString 后,将调用特定实现。

答案 2 :(得分:0)

您有两个选择:

// Solution 1: prits out all instances of Circle, basically also all subclasses of Circle
for (ShapeClass shape : shapes) {
    if (shape instanceof CircleClass)
        System.out.println(shape.toString());
}

//  Solution 2: Matches exact class
for (ShapeClass shape : shapes) {
    if (shape.getClass().equals(CircleClass.class))
        System.out.println(shape.toString());
}

以上解决方案将解决您询问的任务。但也许以下信息对您有用:

如果你想打印每个形状的名称,在这种情况下如何打印它们怎么办?

假设我们有3种形状:

public class Shape {
   public void print() {
       System.out.println("Shape is printed");
   }
}

public class Triangle extends Shape {
   @Override
   public void print() {
       System.out.println("Triangle is printed");
   }
}

public class Circle extends Shape {
   @Override
   public void print() {
       System.out.println("Circle is printed");
   }
}

此代码将准确打印您需要的内容,因为您为所有形状定义了相同的函数,在子类中重写它,并根据在运行时确定的对象类型调用相应的函数:

for (Shape shape : shapes) {
    shape.print();
}

答案 3 :(得分:0)

试试这个,

boost::fusion