【发布时间】:2013-06-03 12:35:41
【问题描述】:
我有一个名为 Shape 的超类:
abstract class Shape {
private String color;
public Shape(String color) {
this.color=color;
}
public String getColor(){return color;}
abstract double Area();
}
还有两个继承类:
class Rectangle extends Shape {
private double b,h;
public Rectangle(double b,double h, String color) {
super(color);
this.b=b;
this.h=h;
}
public double getB() { return b;}
public double getH() { return h;}
public double Area() {
return b*h;
}
}
class Circle extends Shape {
private double r;
public Circle(double r,String color) {
super(color);
this.r=r;
}
public double getR() {
return r;
}
public double Area() {
return 3.14*r*r;
}
}
现在我创建了一组对象或形状(矩形和圆形)。我遇到的问题是当我想遍历这个数组的元素并打印它们的属性时。我想做这样的事情:
for (int i=0;i<lengthShapes;i++) {
System.out.println(shapes[i].getB()+shapes[i].getH()+shapes[i].getR());
}
我的意思是如何识别第 i 个位置的对象是矩形或圆形以打印其属性,请记住,我只有一个形状数组。我想我可以用接口来做到这一点,但如何只使用抽象类来做到这一点。那可能吗? 谢谢
【问题讨论】:
-
您已经有一个使用
Area()方法的示例(顺便说一下,您应该将其重命名为area(),以遵守 Java 中的命名约定)。 -
就像 fge 说的......如果你只想打印它们的属性,你需要覆盖 toString() 并打印出值
-
@fge 是的;更好的是
getArea或calculateArea。据我所知,area不是动词。 -
使用 instanceof 运算符