2014-05-10 25 views
0

我有一个关于调用toString方法的问题,至此我已经在父类中声明了保存在arrayList中的扩展对象。我有父母“产品”类,然后我扩展类“智能手机”。Java:在arraylist中存储扩展对象并调用父项toString方法

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

回答

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() 
+0

谢谢你,但我有存储在ArrayList的子对象,我想打电话给父母的toString()方法在ArrayList中这些对象。所以我不知道如何在arrayList –

+0

的对象上调用super.toString我已经更新了。你可以制作一个委托方法。 –

+0

非常感谢您的建议。 –

1

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

如果未定义,则它将调用其直接父项toString()方法。

,但如果你想打电话给父母的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 
相关问题