我的数组列表显示对象地址而不是对象内容

时间:2019-01-30 16:25:20

标签: java arraylist display

arraylist显示对象地址而不是实际对象,程序使用继承性,其中salesEmployee是超类,而salesAgent和salesPerson是子类。

import java.util.Scanner;
import java.util.ArrayList;
public class tester {
public static void main(String[]args ) {

ArrayList <salesEmployee> listemps= new ArrayList <salesEmployee>();


Scanner user_input= new Scanner(System.in);


salesPerson emp1 = new salesPerson(); 


emp1.setName("Frank Long");
emp1.setppsNumber(65783);
System.out.println("Enter total value of sales earned by Frank Long");
double valeSale;
valeSale=user_input.nextDouble();
emp1.setvalSale(valeSale);
emp1.getCommission();

listemps.add(emp1);

for ( int j=0; j<listemps.size(); j++ )
      System.out.println("element " + j + ": " + listemps.get(j) );
    }
}

这是我的salesPerson班

public class salesPerson extends salesEmployee{

    public salesPerson() {




    }
    public salesPerson(String name, int ppsNumber, double valSale, double commission) {
        super(name, ppsNumber,valSale,commission);

    }

    public void getCommission() {
        commission=valSale*0.15;
    }

    public String toString2() {

        return toString1()+"value of sales"+getvalSale()+"commission:"+commission;
    }

}

稍后我将使其更加优雅,我只是想使其正常工作

已更新:根据我对答案的评论,有一个不同的问题在起作用。这是在注释中添加的内容:

  

输入Frank Long 22.00赚取的销售总额。
  
线程“主”中的异常java.lang.StackOverflowError    salesPerson.toString(salesPerson.java:21)在
   salesPerson.toString(salesPerson.java:21)在
   salesPerson.toString(salesPerson.java:21)在
   salesPerson.toString(salesPerson.java:21)– 5分钟前的lucylio

     

是怎么回事–露西莉奥5分钟

1 个答案:

答案 0 :(得分:0)

为了显示合理的内容,您需要在类中实现toString方法。您确实有toString1toString2,但似乎没有toString。 (您尚未发布salesEmployee类的代码-但很可能它也没有toString实现)。

在没有toString的情况下,将调用默认的Object.toString,它显示对象的地址。

实施toString-您会看到结果。

更新:由于您指出的错误与代码不符,我会一时兴起,建议您的toString2方法实际上是{{1} },而您的toString方法实际上是您的父类(即toString1)中定义的toString。在这种情况下,不要从salesEmployee.java方法内部调用toString(),而应使用toString

super.toString()