【问题标题】:Output List Is Wrong?输出列表错误?
【发布时间】:2014-11-03 21:52:47
【问题描述】:

我有这样的代码:

public class Main {


    public static void main(String[] args) {
        List<Object> arrayList = new ArrayList<Object>();
        arrayList.add(new Student("First", "Last", "10"));
        System.out.println(arrayList);
    }
}

学生班级是:

public class Student extends Human {
    private String grade;

    public Student(String first, String last, String gradeValue) {
        super(first, last);
        this.setGrade(gradeValue);
    }


    public void setGrade(String grade) {
        this.grade = grade;
    }


    public String getGrade() {
        return grade;
    }
}

它将从 Human Class 扩展:

public abstract class Human {
    private String firstname;
    private String lastname;

    public Human(String first, String last) {
        this.setFirstname(first);
        this.setLastname(last);
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

    public String getLastname() {
        return lastname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getFirstname() {
        return firstname;
    }
}

主要想法是我尝试创建一个包含 FirstName LastName 和 Grade 的 10 名学生的列表。

现在,当我尝试在 main 方法中打印列表时,它会显示:[Student@6fbae5f5]。

我希望它显示的是:First Last 10。

请注意,我尝试将更多学生添加到列表中,它必须显示如下:

名字1 姓氏1 10

名字2 姓氏2 3

名字3 姓氏3 7 ......................

【问题讨论】:

  • 覆盖toString

标签: java arrays list oop


【解决方案1】:

在您的学生课程中添加以下代码

@Override
public String toString() {
    return "Student [getFirstname()=" + getFirstname() + ", getLastname()="
            + getLastname() + ", getGrade()=" + getGrade() + "]";
}

【讨论】:

  • 关闭,但这不会编译。您需要将字段的范围更改为受保护,或使用 getter 方法获取名字和姓氏。
【解决方案2】:

由于每个对象都有toString() 方法,默认显示类名表示,然后添加@ 符号,然后是哈希码。在您的情况下,您正在打印对象本身。

如果你想打印arrayList的内容,你应该循环它:

for(Student student : arrayList) {
    System.out.println(student)
}

这是在您将 toString 覆盖为 Student 之后。

【讨论】:

    【解决方案3】:

    1.将此添加到人类类:

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return  firstname + " " + lastname;
    }
    

    2。将此添加到学生班级:

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return super.toString() + " " + grade;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      • 2015-02-11
      • 2020-04-16
      • 1970-01-01
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多