Я занимаюсь этой университетской практикой, и я все застрял, я решил сделать программу для рисования кругов и линий. Он имеет 3 пакета: Evaluar (с основным классом), Dibujo (с классом рисования) и Forma (с 4 классами, The FATHER, forma, formabasica, наследие от Forma и Circulo & Linea, наследие от 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 класса моего проекта: Это класс FATHER: Forma:

    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);
}

Класс Heritage от Forma:

    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);
        }
}
0
Sarah Ruíz 20 Ноя 2018 в 22:43

1 ответ

Лучший ответ

Корень ваших проблем находится в этой строке в Linea:

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

Сообщение об ошибке имеет смысл: в методе paintComponent, где стоит эта строка, нет переменной ejeX, а также нет поля (переменной экземпляра или класса) ejeX в Linea класс. В одном из конструкторов есть параметр ejeX. Но здесь конструктор похож на метод, и вы не можете получить доступ к параметрам или переменным в другом методе, потому что это не имеет смысла. Методы вызываются в разное время, поэтому переменные одного метода обычно не существуют, когда другой метод вызывается и выполняется. То же самое, конечно, с ejeY.

Я предполагаю, что вы хотели использовать значения ejeX и ejeY, которые были переданы конструктору Linea при создании объекта. Они хранятся в суперклассе Forma, и вы можете получить их с помощью методов getX и getY этого класса. Итак, исправление состоит в том, чтобы изменить строку на эту:

        Dibujo.dibujarLinea(getX(), getY(), numSegmentos);

Для других ваших проблем: ошибка, описанная выше, помешала компиляции класса Linea. Когда он не может быть скомпилирован, он также не может быть создан. Так что я надеюсь, что теперь это тоже исправлено.

Если новые сообщения об ошибках появляются по мере того, как вы избавляетесь от старых, не отчаивайтесь, это нормально.

И это не должно быть недружелюбным, наоборот: посмотрим, сможете ли вы найти местного жителя, который вам поможет. Может быть, однокурсник или помощник преподавателя? Время обработки Stack Overflow слишком велико, поэтому ваш прогресс будет медленным, пока вы полагаетесь на нас. Тем более, когда вы публикуете так много кода, потому что многие пользователи откажутся читать все это.

0
Ole V.V. 21 Ноя 2018 в 08:50