JAVA - 多态问题
JAVA - Polymorphism trouble
作为作业,我正在创建一个实现 Node 接口的 SingleLinkedNode class。
节点接口
public interface Node <T> {
static final String NULL_NODE_ERROR = "Node can't be null";
public void setNextNode(Node nextNode) throws NullPointerException;
public void setIndex(int index);
public int getIndex();
public T getData();
public Node getNextNode();
}
SingleLinkedNode class
public class SingleLinkedNode<T> implements Node<T> {
private int index;
private T data;
private SingleLinkedNode nextNode;
public SingleLinkedNode() {
}
public SingleLinkedNode(int index) {
this.index = index;
}
public SingleLinkedNode(int index, SingleLinkedNode nextNode) {
this.index = index;
this.nextNode = nextNode;
}
@Override
public void setNextNode(SingleLinkedNode nextNode) throws NullPointerException{
if (nextNode == null){
throw new NullPointerException(NULL_NODE_ERROR);
}
this.nextNode = nextNode;
}
@Override
public void setIndex (int index){
this.index = index;
}
@Override
public int getIndex() {
return this.index;
}
@Override
public T getData() {
return this.data;
}
@Override
public SingleLinkedNode getNextNode() {
return this.nextNode;
}
}
在 class 的 setNextNode(SingleLinkedNode nextNode) 方法中,它说我没有实现接口的 setNextNode(Node nextNode) 方法,即使 SingleLinkedNode 实现了 Node。
但是,如果我将 class 方法完全保留为接口一,它表示 Node 无法转换为 SingleLinkedNode,这很明显。
是否有任何正确的方法来覆盖此方法并确保该方法仅接受 SingleLinkedNode 对象作为参数?
我考虑过选角,但我不确定这样做是否正确。
谢谢大家解决方案如下
@Override
public void setNextNode(Node nextNode) throws NullPointerException, IllegalArgumentException{
if (nextNode == null){
throw new NullPointerException(NULL_NODE_ERROR);
}
if ( ! (nextNode instanceof SingleLinkedNode) ) {
throw new IllegalArgumentException ("Node is not SingleLinkedNode");
}
this.nextNode = (SingleLinkedNode) nextNode;
}
作为作业,我正在创建一个实现 Node 接口的 SingleLinkedNode class。
节点接口
public interface Node <T> {
static final String NULL_NODE_ERROR = "Node can't be null";
public void setNextNode(Node nextNode) throws NullPointerException;
public void setIndex(int index);
public int getIndex();
public T getData();
public Node getNextNode();
}
SingleLinkedNode class
public class SingleLinkedNode<T> implements Node<T> {
private int index;
private T data;
private SingleLinkedNode nextNode;
public SingleLinkedNode() {
}
public SingleLinkedNode(int index) {
this.index = index;
}
public SingleLinkedNode(int index, SingleLinkedNode nextNode) {
this.index = index;
this.nextNode = nextNode;
}
@Override
public void setNextNode(SingleLinkedNode nextNode) throws NullPointerException{
if (nextNode == null){
throw new NullPointerException(NULL_NODE_ERROR);
}
this.nextNode = nextNode;
}
@Override
public void setIndex (int index){
this.index = index;
}
@Override
public int getIndex() {
return this.index;
}
@Override
public T getData() {
return this.data;
}
@Override
public SingleLinkedNode getNextNode() {
return this.nextNode;
}
}
在 class 的 setNextNode(SingleLinkedNode nextNode) 方法中,它说我没有实现接口的 setNextNode(Node nextNode) 方法,即使 SingleLinkedNode 实现了 Node。
但是,如果我将 class 方法完全保留为接口一,它表示 Node 无法转换为 SingleLinkedNode,这很明显。
是否有任何正确的方法来覆盖此方法并确保该方法仅接受 SingleLinkedNode 对象作为参数?
我考虑过选角,但我不确定这样做是否正确。
谢谢大家解决方案如下
@Override
public void setNextNode(Node nextNode) throws NullPointerException, IllegalArgumentException{
if (nextNode == null){
throw new NullPointerException(NULL_NODE_ERROR);
}
if ( ! (nextNode instanceof SingleLinkedNode) ) {
throw new IllegalArgumentException ("Node is not SingleLinkedNode");
}
this.nextNode = (SingleLinkedNode) nextNode;
}