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
的代码。我有两个其他类Rectangle
和Triangle
,它们与CircleClass
几乎相同。
在另一个类中,我在数组中分配ShapeClass
个对象。
如果我这样做它会像shape [3] = {Shape Object,Shape Object,Shape Object}。我不知道这是不对的,我是java的新手。对不起,如果有任何混淆。
我的问题是,如果我这样做,我如何区分哪个对象是Circle
,Rectangle
还是Triangle
?当我想打印出一个圆形物体时?
感谢您的帮助。
答案 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