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分钟
答案 0 :(得分:0)
为了显示合理的内容,您需要在类中实现toString
方法。您确实有toString1
和toString2
,但似乎没有toString
。 (您尚未发布salesEmployee
类的代码-但很可能它也没有toString
实现)。
在没有toString
的情况下,将调用默认的Object.toString
,它显示对象的地址。
实施toString
-您会看到结果。
更新:由于您指出的错误与代码不符,我会一时兴起,建议您的toString2
方法实际上是{{1} },而您的toString
方法实际上是您的父类(即toString1
)中定义的toString
。在这种情况下,不要从salesEmployee.java
方法内部调用toString()
,而应使用toString
:
super.toString()