2014-05-10 47 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 
相關問題