我有一个超类和两个子类。 当我单击按钮时,这两个子类在我的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,一个在子类上,一个在超类中。
答案 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();
}