如何在不重命名的情况下两次使用实例变量?

时间:2018-04-25 06:08:29

标签: java

帮助,我刚开始学习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();

    }
}

9 个答案:

答案 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:使用不同的变量名称