2013-10-14 126 views
0

考慮這個接口:從Java接口類創建實例

public interface Node { 
    Node next(); 
    Node prev(); 
    void setNext(Node next); 
    void setPrev(Node prev); 
    void setVal(int val); 
    int getVal(); 
} 

我想知道我可以實例化這個類,例如:

Node p = tail; 

我想用它是這樣的。

+0

創建一個實現接口的類,然後實例化新類:'節點p = new SomeClassThatImplementsNode();' – Jesper

回答

2

你不能爲一個接口創建實例,而不是做一些類來實現此接口,併爲該類創建實例

public class NodeImpl implements Node{ 
// your impl  
} 

然後

NodeImpl tail = new NodeImpl(); 
Node p =tail; 
+0

你可以這樣做:'節點tail = new NodeImpl();' – cowls

+0

@cowls yes同意... – upog

2

Node接口,而不是接口類(沒有這種東西)。簡而言之,你不能實例化一個接口或一個抽象類;你只能實例化一個具體的類。

舉一個例子,如果tail的類型爲Node,或者是實現/擴展Node的類/接口,那麼分配將會正常工作。

如果你需要創建一個新的對象,代碼看起來是這樣的:

public interface Node { ... } 

public class NodeImpl implements Node { ... } 

Node p = new NodeImpl(); 
0

對於接口只能用於初始化做這樣的事情(匿名類):

Node p = new Node() { 
    public Node next() {} 
    public Node prev() {} 
    public void setNext(Node next) {} 
    public void setPrev(Node prev) {} 
    public void setVal(int val) {} 
    public int getVal() {} 
}; 

並執行所有的方法。否則,您可以創建一個示例類:

class NodeImpl implements Node { 
    public Node next() {} 
    public Node prev() {} 
    public void setNext(Node next) {} 
    public void setPrev(Node prev) {} 
    public void setVal(int val) {} 
    public int getVal() {} 
} 
Node p = new NodeImpl(); 
0

最好創建一個實現此接口的類。

但是,你仍然可以寫:

Node n = new Node() { 
    //and here you MUST implement all Node methods 
};