我想弄清楚如何通過ArrayList迭代時使用對象的方法。但是,有一部分問題是我無法在上面討論的,在ArrayList中,有一些對象,讓我們稱它們爲鞋子,繼承它,讓我們說衣服。但在這個陣列中也有襯衫和襪子,每個都是從衣服繼承而來。所以這個數組是衣服的類型,以便容納不同類型的對象。觀察:如何在迭代ArrayList時抓取對象方法?
ArrayList<Clothes> list = new ArrayList<Clothes>();
list.add(shoe);
list.add(shirt);
list.add(sock);
而這個工程,因爲他們都從衣服繼承。不過,我想通過此ArrayList迭代,並使用每個對象的唯一方法,像這樣:
for(Clothes piece : list) {
...//something like piece.getShoeSize();
}
說我想打印出鞋的尺寸時,按下按鈕,或者每個襪子的顏色當按下不同的按鈕時。我無法做到這一點,因爲在for循環本身中,它只是尋找衣服類型的東西,但是當我將衣服換成鞋子時,它也不起作用,因爲列表是衣服類型的列表。我試過鑄造片作爲鞋或襯衫,取決於if語句
if(piece instanceof Shoe) {
...//((Shoe) piece).getShoeSize();
}
結果但是,這並不工作。如果您有任何想法,我將非常感謝幫助。
編輯:爲了清晰。
這裏的類層次結構:
public class Clothes {
getColor();
}
public class Sock extends Clothes {
...
}
public class Shirt extends Clothes {
getSize();
}
public class Shoe extends Clothes {
getSize();
}
所以我的程序有一個JComboBox,裏面坐了各種各樣的東西。它下面還有一個JTextArea。我試圖讓我的程序執行的是根據JComboBox中選擇的選項,將某些內容打印到JTextArea中。假設在JComboBox中有一個選項SIZE。當它被選中時,我希望list
中的所有對象都可以執行方法getSize()
,該對象也可以執行方法getSize()
,該方法將對象的大小(如XL或10.5)打印到JTextArea中。現在,因爲類衣服沒有getSize()
方法(因爲並非所有的衣服都有確定的尺寸,例如襪子),我有問題。 list
是Clothes的類型,所以在for循環中,我必須將對象的類型聲明爲Clothes。但piece
因此也是類型的衣服,所以當我嘗試運行getSize()
時,它給了我一個錯誤,因爲衣服裏面沒有方法getSize()
。但list
中的一些對象確實有這種方法。所以我的問題是如何訪問ArrayList list
中衣物類型的對象的這種方法。
你爲什麼要檢查'shoe'的實例,但是投到'Shoe'。這是錯字嗎? –
@KenBekov不,這不是一個錯字。我檢查列表中的對象是否屬於Shoe類型,但是我必須將它投射到Shoe,因爲'piece'是Clothes類型的,因爲for循環 – ipodfreak0313
我的意思是,在您的代碼片段中,您使用'鞋子從小寫字母開始,「鞋子」從大寫字母開始。不同的東西。當你說'不行'時,你是什麼意思?你有什麼例外嗎? –