帮助,我刚开始学习Java,我正在做的这个在线教程要求我创建一个属于类的实例。该实例应该被创建为"矩形"首先是对象,然后是" Circle"宾语。但Eclipse要求我重命名第二个" drawObject"。
public class TestPolymorph {
public static void main(String[] args) {
Shape drawObject = new Rectangle(40,60);
drawObject.draw();
Shape drawObject = new Circle(40);
drawObject.draw();
}
}
答案 0 :(得分:12)
您要将变量声明两次。相反,通过在第二个实例化中删除类型声明来覆盖它:
public class TestPolymorph {
public static void main(String[] args) {
Shape drawObject = new Rectangle(40,60);
drawObject.draw();
drawObject = new Circle(40);
drawObject.draw();
}
}
我鼓励您将名称更改为更有意义的值:
public class TestPolymorph {
public static void main(String[] args) {
Shape rectangleShape = new Rectangle(40,60);
rectangleShape.draw();
Shape circleShape = new Circle(40);
circleShape.draw();
}
}
答案 1 :(得分:2)
您可以在不创建新对象的情况下定义它:
Shape drawObject = new Rectangle(40,60);
drawObject.draw();
drawObject = new Circle(40);
drawObject.draw();
在此代码之后,drawObject引用Circle类型对象。
答案 2 :(得分:1)
如果要重新使用变量,则为Object定义数据类型后,只需将新值分配给变量(不使用数据类型)。在你的情况下:
int i = 0;
int i = 1; \\it won't work. because you already define the datatype
相反:
int i = 0;
i = 1; \\This will work. you don't have to define the datatype again for the same variable
第二次使用drawObject = new Circle(40);
答案 3 :(得分:1)
public class TestPolymorph {
public static void main(String[] args) {
Shape drawObject = new Rectangle(40,60);
drawObject.draw();
drawObject = new Circle(40);
drawObject.draw();
}
}
答案 4 :(得分:1)
我和兰迪一起去, 你必须想象你的对象之间的关系。 形状的矩形和圆形内陷。所以Circle和Rect都可以是Shape。因此可以改变 你的drawObject从Rectangle到Circle但是多个同名变量的声明是错误的。 您的Object drawObject通常只是一个指针,指向堆上指向对象(矩形或圆形)的堆栈。此变量必须始终是唯一的,因此您可以更改它们引用的对象但从不具有相同的变量两次
答案 5 :(得分:1)
您不能对同一范围内的两个变量使用相同的名称。 如果您使用矩形和圆形扩展Shape,那么这将起作用。
public class TestPolymorph {
public static void main(String[] args) {
Shape drawObject = new Rectangle(40,60);
drawObject.draw();
drawObject = new Circle(40);
drawObject.draw();
}
}
注意我在第二次分配相同的引用变量时删除了Type声明,即将new circle引用到引用变量drawObject。
答案 6 :(得分:0)
您再次召回Shape,这将是适当的修复
编辑给他一个更好的解决方案
public class TestPolymorph {
public static void main(String[] args) {
Shape drawObject = new Rectangle(40,60);
drawObject.draw();
drawObject = new Circle(40);
drawObject.draw();
}
}
答案 7 :(得分:0)
您只能将类的实例分配给类的引用,该类可以扩展它或具有相同的类型。如果没有它不会允许你这样做。在这种情况下,Circle和Rectangle应该扩展/实现Shape。
答案 8 :(得分:0)
它不是关于eclipse,java不允许在同一范围内重复名称。由于您在{}
的同一块main()
中有两行,因此您的IDE指出了错误。
如何解决?
选项1:使用不同的块
{
Shape drawObject = new Rectangle(40,60);
drawObject.draw();
}
{
Shape drawObject = new Circle(40);
drawObject.draw();
}
选项2:使用相同的变量。
Shape drawObject;
drawObject = new Rectangle(40,60);
drawObject.draw();
drawObject = new Circle(40);
drawObject.draw();
选项3:使用不同的变量名称