【问题标题】:Practice Java problems练习Java问题
【发布时间】:2018-11-20 19:43:15
【问题描述】:

我正在做这个大学练习,我被困住了,我想制作一个程序来画圆和线。它有 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

        }
}

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

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

我添加了我项目的其他类的 java: 这是父亲: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);
}

来自Forma的Heritage类:

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

【问题讨论】:

  • FormaBasicaForma 的子类还是实现类?
  • 好吧,你没有说你得到了什么错误,但我假设Forma 类没有被FormaBasica 扩展,因此你不能使用Linea 实例化/跨度>
  • 好像学习 Java 编程还不够难,现在你也在学习如何使用 Stack Overflow。欢迎到这里!提示:Create a Minimal, Complete, and Verifiable example 如果可能的话。准确说明您希望程序执行的操作,尤其是准确说明它的不当行为。如果您看到任何错误消息,请在您的问题中逐字引用或引用它们。这里的很多人都清楚他们的意思,并且可以在您这样做时当场为您提供帮助。
  • 您应该遵循 Java 命名约定:包名应该以小写开头。
  • 我添加了我项目类的其余部分。 Linea 是来自 FormaBasica 的扩展类。而FormaBasica 是Forma 的扩展类。

标签: java abstract


【解决方案1】:

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

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

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

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

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

对于您的其他问题:上面提到的错误阻止了 Linea 类的编译。当它不能被编译时,它也不能被实例化。所以我希望现在也解决了。

如果在您摆脱旧错误时出现新的错误消息,请不要绝望,这很正常。

这不是不友好,相反:看看你能不能找到一个能帮助你的当地人。也许是同学或助教? Stack Overflow的周转时间太长,所以只要你依赖我们,你的进步就会很慢。当您发布如此多的代码时更是如此,因为许多用户会放弃阅读所有代码。

【讨论】: