2013-10-14 98 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 
};