0

我有一个超类和两个子类。当我点击一个按钮时,这两个子类在我的用户界面上使用。我想创建一个 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);
    }

这就是我在 UI 上的内容

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

StackOverflowError 在两个 toStrings 的行上,一个在子类中,一个在超类中。

4

1 回答 1

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();
}
于 2019-11-11T16:59:31.407 回答