Java:当涉及到不同的类时,我无法正确覆盖toString()来打印arraylist

时间:2013-10-02 09:10:33

标签: java arraylist override tostring

这很难描述,但我会尽我所能。我有一个对象的arraylist。这些对象内部是属性。而不是一个类中的所有内容,它们都是单独的类。这是我第一次使用这样的东西,我不确定我的语法是否合适。我正在尝试让println打印出arraylist中的内容,而不是字节码。

//main.java
public class Main {
    public static void main(String[] args) {
        world w = new world();
        System.out.println(w.list);
    }
}

//world.java
public class world {
    ArrayList<object> list = new ArrayList<>;

    public void makeObjectA{
        list.add(new ObjectA())
    }
    public void makeObjectB{
        list.add(new ObjectB())
    }

    @Override public String toString () {
        ObjectA obja = new ObjectA();
        ObjectB objb = new ObjectB();
        return "A: " + obja.getattra() + ", B: " + objb.getattrb();
    }
}

//object.java
public class object {
}

//ObjectA.java
public class ObjectA extends object {
    private int attra = 10;

    public int getattra() {
        return attra;
    }
    public void setattra(int attra) {
        this.attra = attra;
    }
}

//ObjectB.java
public class ObjectB extends object {
    private String attrab = "Ten";

    public String getattrb() {
        return attrb;
    }
    public void setattrb(String attrb) {
        this.attrb = attrb;
    }
}

输出打印出字节码。我不确定我做错了什么(可能是语法无处不在)。请帮忙吗?

3 个答案:

答案 0 :(得分:0)

您正在调用toString()的{​​{1}}。您应该做的是调用班级ArrayList的{​​{1}}。

toString()

答案 1 :(得分:0)

首先,您可以覆盖对象A和对象B的toString()方法。然后,您可以简单地遍历列表并打印列表中的对象,如下所示。

    for (Object a : myList)
    System.out.println(a);

答案 2 :(得分:0)

您实际上需要覆盖toString()ObjectA类中的ObjectB,这将返回attra,attrab,因为ArrayList会自动调用toString封闭类型打印元素的字符串表示。

https://stackoverflow.com/a/13028580/985143