练习Java问题

时间:2018-11-20 19:43:15

标签: java abstract

我正在大学里做这个练习,我都陷入了困境,我想制作一个程序来画圆和直线。它有3个包,Evaluar(主要类别),Dibujo(具有绘画类别)和Forma(具有4个类别,分别是Forma和FormmaBasica继承的FATHER,forma,formabasica,这是主要类别。

    package PaqueteAplicacion;

import PaqueteFormas.Forma;
import java.util.Scanner;
import PaqueteFormas.Circulo;
import PaqueteFormas.Linea;


public abstract class Evaluar {


    public static void main (String[] args) {
        //Creamos atributos para lo que graficaremos  
        Forma linea1;
        Forma linea2;

         linea1 =  new Linea(); //PROBLEM HERE
         linea2 =  new Linea(1,1);//PROBLEM HERE


        }

Eclipse的错误“无法实例化Linea类型”,我不知道为什么它会给我这个问题。

这是我的Linea课程,我在Circulo上也遇到了同样的问题。

package PaqueteFormas;
import java.util.Scanner;
import PaqueteGraficos.Dibujo;

public  class Linea extends FormaBasica {

    //Atributos

        int numSegmentos;


        public Linea(){

        }

        public Linea(int ejeX, int ejeY){
            super(ejeX,ejeY);
        }




        public void cambiarTamano(int incrementoSegmentos){

            numSegmentos = incrementoSegmentos;

        }

        public void paintComponent() {
        Dibujo.dibujarLinea(ejeX, ejeY, numSegmentos);//More Problem ejeX cannot be resolved as a variable

        }
}

如果您需要更多信息,请告诉我,谢谢!

对不起,我是StackOverflow的新手,所以如果我的帖子不正确,请告诉我。

我添加了我项目的其余类的java: 这是父亲:福尔玛的课:

    package PaqueteFormas;




public abstract class Forma {

    //Añadimos atributos

    private int x,y;


    public Forma() 
    {
        this.x = 1;
        this.y = 1;
    }


    public Forma( int ejeX, int ejeY) {
        this.x = ejeX;
        this.y = ejeY;
    }

    //Establece la edición atributo

    public void setX(int ejeX) {
        x = ejeX;
    }
    public void setY(int ejeY) {
        y = ejeY;

    }


    public int getX() {
        return x;
    };

    public int getY() {
        return y;
    };


    public void moverEjeX(int variacionEnX) {
        x += variacionEnX;

    }
    public void moverEjeY(int variacionEnY) {
        y += variacionEnY;
    }

    public abstract void paintComponent();

    public abstract void cambiarTamano (int variacionTamano);
}

福尔马的遗产课:

    package PaqueteFormas;

    public abstract class FormaBasica extends Forma {

    public FormaBasica(){//Constructor por defecto
        super(1,1);
    }

    public FormaBasica(int ejeX, int ejeY){//Constructor pasando los atributos
        super(ejeX,ejeY);
    }
}

FormaBasica的其他阶级的遗产

 package PaqueteFormas;
    import java.util.Scanner;
    import PaqueteGraficos.Dibujo;

public  class Linea extends FormaBasica {



        int numSegmentos;


        public Linea(){

        }

        public Linea(int ejeX, int ejeY){
            super(ejeX,ejeY);
        }




        public void cambiarTamano(int incrementoSegmentos){

            numSegmentos = incrementoSegmentos;

        }

        public void paintComponent() {
        Dibujo.dibujarLinea(ejeX, ejeY, numSegmentos);
        }
}

1 个答案:

答案 0 :(得分:0)

问题的根源在Linea的这一行:

        Dibujo.dibujarLinea(ejeX, ejeY, numSegmentos);//More Problem ejeX cannot be resolved as a variable

该错误消息是有道理的:ejeX方法中没有变量paintComponent,该行所在的位置,{中也没有字段(实例或类变量)ejeX {1}}类。其中一个构造函数中有一个参数Linea。但是这里的构造函数就像一个方法一样,您不能在另一个方法中访问参数或变量,因为这样做是没有意义的。方法在不同的时间被调用,因此一个方法的变量通常在另一个方法被调用并正在执行时不存在。当然,ejeX也是如此。

我假设您打算使用创建对象时传递给ejeY构造函数的ejeXejeY的值。这些已存储在Linea超类中,您可以通过该类的FormagetX方法获得它们。因此,解决方法是将行更改为此:

getY

对于您的其他问题:上述错误阻止了 Dibujo.dibujarLinea(getX(), getY(), numSegmentos); 类的编译。如果无法编译,则也无法实例化。所以我希望现在也解决。

如果随着您摆脱旧错误而出现新的错误消息,请不要失望,这是正常的。

相反,这也不是不友好的:看看您是否可以找到当地人来帮助您。也许是同学还是助教? Stack Overflow的周转时间太长,因此只要您依赖我们,您的进度就会很慢。在您发布太多代码时,甚至更多,因为许多用户会放弃阅读全部代码。