考慮這個接口:從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;
我想用它是這樣的。
考慮這個接口:從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;
我想用它是這樣的。
Node
是接口,而不是接口類(沒有這種東西)。簡而言之,你不能實例化一個接口或一個抽象類;你只能實例化一個具體的類。
舉一個例子,如果tail
的類型爲Node
,或者是實現/擴展Node
的類/接口,那麼分配將會正常工作。
如果你需要創建一個新的對象,代碼看起來是這樣的:
public interface Node { ... }
public class NodeImpl implements Node { ... }
Node p = new NodeImpl();
對於接口只能用於初始化做這樣的事情(匿名類):
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();
最好創建一個實現此接口的類。
但是,你仍然可以寫:
Node n = new Node() {
//and here you MUST implement all Node methods
};
創建一個實現接口的類,然後實例化新類:'節點p = new SomeClassThatImplementsNode();' – Jesper