2017-06-17 59 views
0

我想存儲從鏈接列表中的單個類繼承的兩個不同類的對象。添加從單個類繼承的不同類的對象

代碼示例

class Animal { 
    ..... 
    ..... 
    ..... 
} 

class Dog extends Animal { 
    ..... 
    ..... 
    ..... 
} 

class Snake extends Animal { 
    ..... 
    ..... 
    ..... 
} 

現在我想做的事情是這樣的:

Linkedlist <Animal> animalslist = new Linkedlist <>(); 

animalslist.push (new Dog); 

animalslist.push (new Snake); 

當我像這樣的代碼爲我的Android的應用程序,它成功地建立,但是當我運行應用程序崩潰。

+0

什麼是崩潰異常?也許這不是因爲繼承? – Vadim

+0

不知道異常,但問題在於將不同類的對象添加到同一個列表中。 謝謝 – geekFromPeshawar

+0

沒有關於崩潰的細節沒有可能說...也許你需要指定在List實例中的對象類型? 'new LinkedList ()'也許在構造函數中有什麼問題......誰知道... – Vadim

回答

-1

您正面臨的問題是,正如您正確地指出的那樣,因爲您試圖將不同的類添加到同一個列表中。

通常情況下,在Java中,當你創建一個能夠List存儲一些類,如List<Animal>,這並不意味着狗或蛇的名單將有上述列表作爲它們的父:

// These two lists do not share a relation: one is not inherent of the other 
List<Animal> animalList = new LinkedList<>(); 
List<Dog> dogList = new LinkedList<>(); 

然而,有希望: 如果你創建了另一類使得Animal子類的用途,並且最終使用在List,你就可以訪問每一個類的實例,每個List元素:

class myClass { 
    Dog dog; 
    Snake snake; 
} 
// You can then add the class 
List<myClass> myList = new LinkedList<>(); 

此外,您可以預先設置每個DogSnake的具體數據。其中,每個myClass對象添加到myList將包含所有必要的數據,然後可以稍後訪問。

希望這有助於:)

+0

任何其他方式來存儲從動物中繼承的狗和蛇的對象在一個單一的數據結構? – geekFromPeshawar

+0

@Steamwork - 您的陳述不正確。因爲如果它是正確的,我有一個'List '我不能添加任何對象,因爲它們的實際類不是Object。實際上,我可以添加任何類的任何對象,甚至不會從另一個類繼承,因爲它們都是Object的子類。 – Vadim

0

爲了方便說明,以@Steamwork:下面 代碼完美的作品,甚至ClassB的和ClassA的沒有相互關聯的所有...

public class TestItMain { 
    public static void main(String[] args) { 

    LinkedList<Object> list = new LinkedList<Object>(); 

    list.add(new ClassA());  
    list.add(new ClassB()); 

    System.out.println(((ClassA)list.get(0)).val1); 
    System.out.println(((ClassB)list.get(1)).val2); 
    } 

    public static class ClassA 
    { 
    public int val1=1; 
    } 

    public static class ClassB 
    { 
    public int val2=2; 
    } 
} 

@geekFromPeshawar - 這個例子是確認你的問題不是關於List(或LinkedList)的。問題在其他地方... 這可能是一個問題,因爲您使用push方法。它實際上將所有對象都轉移下來每次推動後,每個位置的對象類可能會發生變化。使用push必須非常小心。 恕我直言,對於這種情況下,使用add方法好得多,當添加的對象保持原位時...

+0

我也嘗試過使用add()方法。但仍不能正常工作 – geekFromPeshawar

+0

不要嘗試任何事情,先找出問題的真正原因。否則,你將永遠找不到解決方案。 – Vadim