Java 如何调用数组中的方法?
我认为这个题目不能很好地涵盖我的问题。我正在实例化一个新对象,并将该对象存储在数组myShapes中。每个对象的类都有一个计算表面积和体积的方法。我需要调用所有这些方法,我相信这可以通过for循环实现,但我不确定如何实现。我完全被难住了。如果您将对象存储在Java 如何调用数组中的方法?,java,arrays,methods,instantiation,Java,Arrays,Methods,Instantiation,我认为这个题目不能很好地涵盖我的问题。我正在实例化一个新对象,并将该对象存储在数组myShapes中。每个对象的类都有一个计算表面积和体积的方法。我需要调用所有这些方法,我相信这可以通过for循环实现,但我不确定如何实现。我完全被难住了。如果您将对象存储在形状[]数组中,那么您需要确保定义 volume()&surfaceearea()作为shape类中的抽象方法,这样,每个形状(圆柱体、球体等)都将能够重写和实现。它们也需要命名相同。向超类添加抽象方法: public class Main {
形状[]
数组中,那么您需要确保定义
volume()
&surfaceearea()
作为shape类中的抽象方法,这样,每个形状(圆柱体、球体等)都将能够重写和实现。它们也需要命名相同。向超类添加抽象方法:
public class Main {
public static void main(String[] args) {
shape[] myShapes = new shape[3];
myShapes[0] = new cube(3);
myShapes[1] = new Sphere(2);
myShapes[2] = new Cylinder(3, 4);
for (shape: myShapes)
System.out.println()
}
}
class cube extends shape {
public double side;
public double newSide;
public double volume;
public double surface;
public cube(double side) {
this.side = side;
}
public void cubeVolume(){
volume = Math.pow(side,3);
System.out.println (volume);
}
public void cubeSurface(){
surface = Math.pow(side,2) * 6;
System.out.println (surface);
}
}
abstract class shape{
protected double volume;
protected double surface;
}
public class Sphere extends shape {
public double radius;
public double volume;
public double area;
public double i = 4;
public double j = 3;
public Sphere(double radius) {
this.radius = radius;
}
public void sphereVolume(){
volume = i/j * Math.PI * Math.pow(radius,3);
System.out.println(volume);
}
public void surfaceArea(){
area = 4 * Math.PI * Math.pow(radius,2);
System.out.println(area);
}
}
public class Cylinder extends shape{
public double radius;
public double height;
public double cylinderVolume;
public double cylinderArea;
public Cylinder(double radius, double height) {
this.radius = radius;
this.height = height;
}
public void surface(){
cylinderArea = 2 * Math.PI * radius * height;
System.out.println(cylinderArea);
}
public void volume(){
cylinderVolume = Math.PI * Math.pow(radius, 2) * height;
System.out.println(cylinderVolume);
}
}
在您的子类中实现它们,例如对于圆柱体:
abstract class Shape {
// Note: No fields
public abstract double surfaceArea();
public abstract double volume();
}
然后在循环中打印它们:
public class Cylinder extends Shape {
// radius and height fields and constructor not shown
public double surfaceArea() {
return 2 * Math.PI * radius * height;
}
public double volume() {
return Math.PI * Math.pow(radius, 2) * height;
}
}
请注意,您不希望在方法内部打印-这是一个呈现问题,如果合适,应该由调用方完成。例如,如果只是对形状进行计算和比较,则不需要大量输出
此外,如果您遵循,它对可读性也有很大帮助,尤其是类应该是SentenceCase
和变量/参数camelCase
,因此请调用类Shape
,而不是Shape
,Cube
,等等
如果您没有公共字段,则对于超类型,首选接口
而不是抽象类
。它将帮助我们查看您的类层次结构。什么是立方体、球体、圆柱体和形状对象?如果在Shape对象中声明了surface area和volume方法,那么它应该可以工作。您的基类Shape
是否声明了您要调用的那些方法?抱歉,我刚刚添加了其他类。shape类是抽象的,它声明了变量体积和面积。如果您遵循,它将极大地提高可读性,尤其是类应该是SentenceCase
和变量/参数camelCase
。好的,现在我得到了这个错误:cube不是抽象的,并且不会覆盖shape类cube扩展shape中的抽象方法surface()。这就是为什么我一开始没有包括抽象方法。我不明白为什么它会对多维数据集类不是抽象的问题大惊小怪。我认为抽象方法的关键在于通过非抽象的子方法重写它们。@Noobprogrammer是的,然后,您的具体类需要提供基类中声明为抽象的方法的实现。@Noobprogrammer确保子类中的方法名称与超类中的方法名称完全匹配
for (shape : myShapes) {
System.out.println("Surface area = " + shape.surfaceArea + ", volume = " + shape.volume());
}