好的,我有三个班级
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);
}
}
答案 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();
}