Java 为没有字段的类创建构造函数

Java 为没有字段的类创建构造函数,java,arrays,inheritance,constructor,Java,Arrays,Inheritance,Constructor,我试图创建一个抽象类(Shape)和三个子类(Square、Circle、Triangle),每个子类都没有字段和一个void方法--“drawShape”--用星号绘制每个形状。然后,在我的主方法中,我应该创建每个Shape子类对象的数组,并循环调用它们的drawShape方法。不幸的是,我一直收到错误:文件:C:\Users\Robert\Demo.java[行:13] 错误:令牌上的语法错误,构造错误 我的问题是如何创建这些形状对象,以及如何实现循环以在这些对象的数组中调用它们的drawS

我试图创建一个抽象类(Shape)和三个子类(Square、Circle、Triangle),每个子类都没有字段和一个void方法--“drawShape”--用星号绘制每个形状。然后,在我的主方法中,我应该创建每个Shape子类对象的数组,并循环调用它们的drawShape方法。不幸的是,我一直收到错误:
文件:C:\Users\Robert\Demo.java[行:13]
错误:令牌上的语法错误,构造错误

我的问题是如何创建这些形状对象,以及如何实现循环以在这些对象的数组中调用它们的drawShape方法

public abstract class Shape
{
  public abstract void drawShape();
}

public class Square extends Shape
{
  @Override
  public void drawShape()
  {
    System.out.println("****\n" + "*  *\n*  *\n****");
  }
}

public class Circle extends Shape
{
  @Override
  public void drawShape()
  {
    System.out.println("   " + "*" + "\n  " + "* *" + "\n " + 
                       "*   *" + "\n  " + "* *" + "\n   " + "*");
  }
    }

public class Triangle extends Shape
{
  @Override
  public void drawShape()
  {
    System.out.println("   " + "*" + "   " +
                       "\n  " + "* *" + "  " + 
                       "\n " + "***" + " ");
  }
}

public class Demo
{
  public static void main(String[] args)
  {
    Triangle triangle = new Triangle();
    Circle circle = new Circle();
    Square square = new Square();
    Shape[] shapes = new Shape{triangle, circle, square};
    //How can I properly create this array^
    //How can I loop through the array to call each objects drawShape method

  }
}
像这样:

Shape[] shapes = new Shape[] {triangle, circle, square};

这:
Shape[]shapes=新形状{三角形、圆形、正方形}需要变成:
Shape[]shapes=新形状[]{三角形、圆形、正方形}

数组对象在Java中是一个
Iterable
。这意味着您可以使用修改后的
for
循环来遍历它:

for(Shape shape : shapes)
    shape.drawShape();
使用方法如下:

Shape triangle = new Triangle();
Shape circle = new Circle();
Shape square = new Square();

Shape[] shapes = new Shape[] {triangle, circle, square};
Arrays.stream(shapes).forEach(Shape::drawShape);

我感谢你的帮助!