如何从main方法打印void方法

时间:2013-04-23 18:31:42

标签: java abstract-class static

好的,我有三个班级

abstract class Shape  
{  
int width, height;  
String color;

public void draw()    
{      
}
    } // end Shape class

``

class Rectangle extends Shape
   {
Rectangle(int w, int h, String color)
{
    width = w;
    height = h;
    this.color = new String(color);
}

public void draw()
{
    System.out.println("I am a " + color + " Rectangle " + width + " wide and " + height + " high.");
}
   }// end Rectangle class

``

 class Circle extends Shape
   {
  Circle (int r, String color)
   {
    width = 2*r;
    height = 2*r;
    this.color = new String(color);   
}
public void draw()
{
    System.out.println("I am a " + color + " Circle with radius " + width + ".");
}
    } // end Circle class

``我想要做的是创建一个新类来产生以下输出: 我是一个20宽10高的蓝色矩形。 我是一个半径为30的红色圆圈。 我是绿色的长25宽25高 但我在调用方法draw()时遇到问题;

 This is the main class:
 public class Caller
  {
   public static void main(String args[]) 
    {
Caller call= new Caller();
Shape[] myShape = new Shape[3];

   myShape[0] = new Rectangle(20,10,"blue");
   myShape[1] = new Circle(30, "red");
   myShape[2] = new Rectangle(25,25, "green");
   for (int i=0; i < 3; i++)
     {
System.out.println();
     }
    call.draw(Rectangle);
    call.draw(Circle);
   } 
   }

4 个答案:

答案 0 :(得分:2)

您的代码格式很糟糕,所以这只是猜测。我想你应该改变

for (int i=0; i < 3; i++)
     {
System.out.println();
     }
    call.draw(Rectangle);
    call.draw(Circle);

for (int i=0; i < myShape.length; i++) {
    myShape[i].draw();
}

此外,在Shape班级更改

public void draw()
{
}

public abstract void draw();

答案 1 :(得分:1)

您的draw()方法是在Shape类上定义的,而不是在Caller类上定义的。

myShape [0] .draw()打印矩形,例如。

答案 2 :(得分:0)

for循环中,您需要针对您所在的特定draw调用Shape方法,除非您需要致电System.out.println()想要另一条空白。

for (int i=0; i < 3; i++)
{
    myShape[i].draw();
}

删除call.draw之类的行。您不使用call来调用方法。实际上,您甚至不需要Caller对象的实例。只需在您已有的draw个对象上调用Shape方法即可。

正如jlordo的回答一样,如果没有方法,Shape类就不需要是抽象的。因此,您可以制作draw方法abstract,也可以从abstract类中移除Shape

答案 3 :(得分:0)

您的代码存在以下问题:

1)抽象类中的draw()方法应该是抽象的。或者,您可以将其实现为“部分”,就像在我进一步向下发布的解决方案中那样,然后在Shape类中没有abstract关键字:

2)不需要新的字符串(“颜色”)。字符串是不可变的,所以你可以写如下。

3)您错过了指定您的班级成员是私人的还是公共的还是受保护的。考虑变量的可见性总是一个好主意。

4)您尝试打印的直径不是半径

5)您尝试在类上调用方法而不是在实例上调用

这是我的建议(未经测试......可能会有更多我没有看到的问题):

class Shape  
{  
  protected int width, height;  
  protected String color;

  public void draw()    
  {      
    System.out.print("I am a " + color");
  }
} // end Shape class

class Rectangle extends Shape
{
  Rectangle(int w, int h, String color)
  {
    this.width = w;
    this.height = h;
    this.color = color;
  }

  public void draw()
  {
    super();
    System.out.print(" Rectangle " + width + " wide and " + height + " high.\n");
  }
}// end Rectangle class

class Circle extends Shape
{
  Circle (int r, String color)
  {
    this.width = 2*r;
    this.height = 2*r;
    this.color = new String(color);   
  }
  public void draw()
  {
    super();
    System.out.print(" Circle with radius " + (width/2) + ".\n");
  }
} // end Circle class

稍后在main方法中,您需要执行以下操作:

Shape[] myShape = new Shape[3];

myShape[0] = new Rectangle(20,10,"blue");
myShape[1] = new Circle(30, "red");
myShape[2] = new Rectangle(25,25, "green");
for (int i=0; i < 3; i++)
{
  myShape[i].draw();
}