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) );
}
}
这是我的销售人员课程
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;
}
}
我稍后会让它更优雅,现在我只是想让它工作
更新:根据对我回答的评论,还有一个不同的问题在起作用。以下是评论中添加的内容:
输入弗兰克·朗获得的总销售额 22.00
线程"main"java.lang.StackOverflowError at 中的
异常 salesPerson.toString(salesPerson.java:21) at
salesPerson.toString(salesPerson.java:21) at
salesPerson.toString(salesPerson.java:21) at
salesPerson.toString(salesPerson.java:21) – lucylio 5分钟前是怎么回事 – 露西里奥 5 分钟
为了显示合理的内容,您需要在类中实现toString
方法。 你确实有toString1
和toString2
,但似乎没有toString
。(您尚未发布salesEmployee
类的代码 - 但很可能它也没有toString
实现)。
如果没有toString
,则调用默认Object.toString
,它显示对象的地址。
实施toString
- 您将看到结果。
更新:由于您指示的错误与代码不对应,我会心血来潮并建议,可能您的toString2
方法实际上是toString
,而您的toString1
方法实际上是父类中定义的toString
,即 salesEmployee.java
. 在这种情况下,不要从 toString
方法内部调用toString()
,而是改用super.toString()
:
public class salesPerson extends salesEmployee {
...
public String toString2() {
return super.toString()+"value of sales"+getvalSale()+"commission:"+commission;
}
}