[英]choosing specific object in an array of objects
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
是什么對象? 當我只想打印圓形對象時?
謝謝您的幫助。
您可以使用instanceof
檢查:
if(shape[0] instanceof Circle){
// do something
}
所以在Java中有一個運算子-的執行個體:
if(shapeObject instanceof Circle){
//print
}
因此您可以使用它按類型區分對象。 另外,關於您的問題是否正確:您可以使用這種方法創建父對象類型的數組並將子對象放入其中。 之后,如果您從該數組中的每個對象上調用toString方法,則將調用該方法的特定實現。 例如,如果此數組中有Circle對象,並且其中重寫了toString方法,則在從ShapeObject數組中的對象上調用toString之后,將調用特定的實現。
您有2個選擇:
// 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();
}
這樣嘗試
for(int i = 0; i < shapeArray.length; i++){
if(shapeArray[i] instanceof CircleClass){
// print circle here
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.