2017-04-18 68 views
-1
public class Shop 
{ 
    private static List<Product> products = new List<Product>(){}; 
} 

代碼拋出異常:不是抽象的,在列表中不重寫抽象方法子列表(INT,INT)Java靜態列表實現

+0

列表是您可以將其更改爲新的ArrayList的接口() – mir

+3

1.它不會拋出異常它會給您一個編譯錯誤。 2.你不明白那個錯誤呢?你不能實例化抽象類或接口。但是,如果您實施所有抽象方法,您可以創建一個匿名子類。 –

+0

你想做什麼? –

回答

2

你不能實例化一個列表,它只是一個接口。因此實例化它的一個實現,例如ArrayList:

public class Shop 
{ 
    private static List<Product> products = new ArrayList<Product>(); 
} 
0

List是一個接口。您無法初始化接口的實例。您需要初始化實現List的類,如ArrayList

private static List<Product> products = new ArrayList<Product>(){}; 
1

正如在其他的答案中提到這裏java.lang.Listinterface。我想再補充一點。 List是一個interface表示它定義必要的合同必須遵守和由任何類別履行到合格列表。這樣的類的用戶可以肯定所遵循的合同,所以不用擔心內部源代碼,他們可以確定它遵循所有標準的預定義規則來作爲列表。

Interface,這正好是合同必須實施一些實現。一個interface本身不能實例化,它只有Abstraction你不能在interface的對象沒有在具體的類中實現它。

在java中您可以使用關鍵字implements帶班,然後必須實施由interface定義的方法。您還可以使用惱人的類風格。但是如果任何一個類(包括這樣一個惱人的類也)實現一個接口,則必須提供實現接口中定義的所有方法的具體實現。爲此,您可以使用

public interface AnyInterface{ 
    void anyMethodA(); // methods are public and abstract by default 
    void anyMethodB(); // see as the methods just have signature here, no body 
} 

現在你可以使用annoyonmous風格,如下使用花括號。

AnyInterface objectOfAnnoyomousClass = new AnyInterface(){ 
    public void anyMethodA(){ 
      // curly braces implies a method body, here you can have the method implemented 
    } 
    public void anyMethodB(){ 

    } 
}; 

java.util類具有如ArrayListLinkedListjava.util.List的implemetation。

private static List<Product> products = new LinkedList<Product>(); 

有很多可用於java集合的材料,包括非常好的java文檔。

** P.S。 static實際上與您在代碼中顯示的編譯時問題無關。