Java:在arraylist中存储扩展对象并调用父toString方法

时间:2014-05-10 19:18:21

标签: java class arraylist tostring

我有一个关于调用toString方法的问题,我已经在父类中声明了在arrayList中保存的扩展对象。我有父“Product”类,然后我扩展了类“Smartphone”。

我的问题是我在父类和扩展类中声明了toString()方法,我需要调用这两个方法,但我不知道如何在存储在arrayList中的扩展对象上调用父toString()方法。 谢谢你的建议。

2 个答案:

答案 0 :(得分:3)

您需要使用super来引用您的父类。

class A {
    @Override
    public String toString() {
        return "A's toString()";
    }
}

class B extends A {
    @Override
    public String toString() {
        return super.toString() + " " + "B's toString()";
    }
}

B b = new B();
System.out.println(b); // prints "A's toString() B's toString()"

编辑:

如果您孩子的toString() 总是打电话给父母,那么您甚至不需要孩子的toString()

如果您希望为您的孩子保留一个与父母不同的自定义toString(),但您也希望能够从孩子那里拨打父母的toString(),授权方法。

class B extends A {
    @Override
    public String toString() {
        ...
    }

    public String parentsToString() {
        return super.toString();
    }
}

B b = new B();
b.parentsToString(); // will return the output of A's toString()

答案 1 :(得分:1)

默认情况下,我们编写每个对象引用,它在内部调用自己的toString方法。

如果未定义,则会调用其直接父级的toString()方法。

但是如果你想使用子引用变量调用parent toString()方法,那么

在子级中定义toString并调用父级toString并附加自己的定义。

例如

class Parent {
    @Override
    public String toString() {
        return "Parent";
    }
}

class Child {
    @Override
    public String toString() {
        return super.toString() + " " + "child";
    }
}

Child child = new Child();
System.out.println(child); // prints parent child