我不了解在将toString与我的用户界面混合时,toString存在的问题

时间:2019-11-11 16:46:16

标签: java swing user-interface overriding tostring

我有一个超类和两个子类。 当我单击按钮时,这两个子类在我的ui上使用。我想创建一个Estudiante并将其放在列表中。 Estudiante内部有很多属性,因此我在子类和超类上具有toString方法。 我已经编辑了setListData的属性,因此不再需要字符串。问题是,现在当我运行程序并尝试添加Estudiante并显示它时,它在子类和超类的toString的行上给了我StackOverflowError。如果有人可以尝试用我的代码修复它,我将不胜感激。谢谢

我没有做太多尝试,过去只更改了设置列表的方法,但从理论上讲现在是固定的。

public class Estudiante extends Persona{
    private int numero;
    private int semestre;

    public Estudiante(String unNombre, int unaCedula, String unMail, int unNumero, int unSemestre) {
        super(unNombre,unaCedula,unMail);
        this.setNumero(unNumero);
        this.setSemestre(unSemestre);
    }

Estudiante的toString()(我没有发布get和set方法,因为我认为它们并不重要)

@Override

    public String toString(){
        return super.toString() + "Numero:" + this.getNumero() + "Semestre: " + this.getSemestre();
    }
    ```

SUPERCLASS TOSTRING(Persona)

@Override
    public String toString(){
        return toString() + "Nombre"+ this.getNombre() + "Cedula " + this.getCedula() + "Mail " + this.getMail();
    }

    public Persona(String unNombre, int unaCedula, String unMail){
        this.setNombre(unNombre);
        this.setCedula(unaCedula);
        this.setMail(unMail);
    }

这就是我在用户界面上拥有的

private void BotonCrearEstudianteActionPerformed(java.awt.event.ActionEvent evt) {                                                     
        Estudiante unEst=new Estudiante(NombreEstudiante.getText(), Integer.parseInt(CedulaEstudiante.getText()),MailEstudiante.getText(), Integer.parseInt(NumeroEstudiante.getText()), Integer.parseInt(SemestreEstudiante.getText()));
        modelo.agregarEstudiante(unEst);
        ListaEstudiantesJ.setListData(modelo.getListaEstudiantes().toArray());
在两个toString的行上分别显示

StackOverflowError,一个在子类上,一个在超类中。

1 个答案:

答案 0 :(得分:0)

public String toString(){
    return toString()
        + "Nombre"+ getNombre() + "Cedula " + getCedula() + "Mail " + getMail();
}

调用重写的toString:

public String toString(){
    return super.toString()
        + "Numero:" + getNumero() + "Semestre: " + getSemestre();
}

再次调用原始的toString。

因此循环不断。

在基类中有两种可能性:

只有super.toString()是正确的:

public String toString(){
    return super.toString()
        + "Nombre"+ getNombre() + "Cedula " + getCedula() + "Mail " + getMail();
}

或者根本就没有toString。

public String toString(){
    return "Nombre"+ getNombre() + "Cedula " + getCedula() + "Mail " + getMail();
}