Я согласен с тем, что, но вместо реализации вашей собственной функции print (), вам может быть полезно (и быть более объектно-ориентированным) избегать падений путем переопределения функции toString ().
public class Geometry
{
String shape_name;
String material;
public Geometry()
{
System.out.println("New geometric object created.");
}
public String toString() {
StringBuilder result = new StringBuilder();
result.append("Shape name: " + shape_name + "\t");
result.append("Material: " + material + "\t");
return result.toString();
}
public static void check (Geometry[] gList) {
for (Geometry g: gList) {
System.out.println(g.toString());
}
}
Обратите внимание, что check()
не волнует, является ли g Сферой или Кубом. Это поможет свести к минимуму звонки на instanceof
.
В Сфере ...
public class Sphere extends Geometry
{
Vector3d center;
double radius;
public Sphere(Vector3d coords, double radius, String sphere_name, String material)
{
this.center = coords;
this.radius = radius;
shape_name = sphere_name;
super.material = material;
}
public String toString() {
StringBuilder result = new StringBuilder();
result.append("Radius: " + radius + "\t");
result.append("Center: " + center.toString() + "\t");
result.append(super.toString());
return result.toString();
}
}
Любая новая фигура (например, Конус) выиграет, если у нее есть функция toString (), но ее отсутствие просто распечатает версию Geometry.