2017-04-18 56 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实际上与您在代码中显示的编译时问题无关。